DownloadFile vs DownloadFileAsync

Estou a usar o WebClient.DownloadFile to download a single file at a time from a web server, however, I want to know if by" The thread is blocked " developers mean that the application won't be responsive?

Tentei usar o WebClient.DownloadFileAsync mas não funciona como DownloadFile works, por favor esclareça, e eu não posso dizer porque estou baixando arquivos da minha rede, então ele praticamente faz downloads instantaneamente, obrigado de antemão.

PS: sim eu tentei pesquisar e ler no Google, não consegui encontrar a resposta de que precisava.

Author: i3arnon, 2014-01-09

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)

 10
Author: i3arnon, 2014-01-09 00:25:19
client.DownloadFileTaskAsync(new Uri(url), saveLocation).Wait();
// Waiting for download...
 -1
Author: , 2017-03-01 07:16:45