DownloadFile vs DownloadFileAsync
2 answers
Editar: WebClient.DownloadFileAsync
termina com "Async" mas não devolve uma tarefa. Faz parte da minha resposta, por isso, não é relevante. Este é: você precisa se inscrever para WebClient.DownloadFileCompleted
evento para saber quando a operação async terminou. Por exemplo:
var client = new WebClient();
var uri = new Uri(address);
client.DownloadFileCompleted += (sender, e) => Console.WriteLine("Finished");
client.DownloadFileAsync(uri, "Hamsters.txt");
Resposta Original:
WebClient.DownloadFileAsync
devolve uma tarefa que precisas de esperar. assim:
await WebClient.DownloadFileAsync(...)
DownloadFileAsync
é dispara uma operação assíncrona e retorna uma tarefa que vai terminar quando a operação terminou. Significa esperar que essa tarefa termine num modo assíncrono, de modo que o código a seguir será executado quando você tiver o resultado de DownloadFileAsync
.
O sincrónico DownloadFile
irá bloquear a linha que lhe chamou. Se é o fio UI, então sim... a tua aplicação não vai responder. Se não for o tópico UI, então ele ainda será responsivo, mas será menos escalável (o que significa que ele usa threads para esperar em vez de fazer o trabalho, de modo que sua aplicação como um todo pode fazer menos com a mesma quantidade de threads)