ele pode substituir completamente a velha maneira de usar Threads?
Não. Um tópico pode fazer muitas coisas mais úteis. O Await foi projetado especificamente para lidar com algo que leva tempo, normalmente uma solicitação de E / S. O que tradicionalmente era feito com um retorno de chamada quando a solicitação de E / S era concluída. Escrever código que depende desses callbacks é bastante difícil, o await o simplifica muito.
capaz de fazer tudo o que um Thread pode fazer de forma assíncrona?
Aproximadamente. O Await apenas se encarrega de lidar com o atraso, caso contrário, ele não faz nada que um thread faz. A expressão await , o que está à direita da palavra-chave await, é o que executa o trabalho. O ideal é que ele não use nenhum thread, ele posta uma solicitação de driver e, uma vez que o driver conclui a transferência de dados, ele gera um retorno de chamada de notificação de conclusão. A rede é de longe o uso mais comum, latências de centenas de milissegundos são comuns e um efeito colateral inevitável da transferência de serviços do desktop ou de uma LAN para "a nuvem". Usar esses serviços de forma síncrona faria com que a IU parasse de responder.
só pode ser usado com alguns métodos como WebClient.DownloadStringAsync
Não. Você pode usá-lo com qualquer método que retorne uma Tarefa. Os métodos XxxxAsync () são apenas aqueles pré-cozinhados na estrutura .NET para operações comuns que levam tempo. Como baixar dados de um servidor web.