我使用WebClient.DownloadFile一次从web服务器下载一个文件,但是,我想知道开发人员所说的“线程被阻塞”是否意味着应用程序将不会响应?
我试过使用WebClient.DownloadFileAsync,但它不像DownloadFile那样工作,请澄清,我不知道,因为我是从我的网络上下载文件,所以它几乎是即时下载的,提前谢谢。
附言:是的,我试着搜索和阅读,但找不到我需要的答案。
发布于 2014-01-09 08:01:27
编辑:WebClient.DownloadFileAsync以"Async“结尾,但不返回任务。这是Event-based Asynchronous Pattern的一部分,所以我的回答无关紧要。这是:您需要订阅WebClient.DownloadFileCompleted事件,才能知道异步操作何时完成。例如:
var client = new WebClient();
var uri = new Uri(address);
client.DownloadFileCompleted += (sender, e) => Console.WriteLine("Finished");
client.DownloadFileAsync(uri, "Hamsters.txt");原始答案:WebClient.DownloadFileAsync返回一个你需要等待的任务。如下所示:
await WebClient.DownloadFileAsync(...)DownloadFileAsync将触发一个异步操作,并返回一个将在操作结束时完成的任务。await意味着等待该任务以异步方式结束,因此它之后的代码将在您得到DownloadFileAsync的结果时运行。
同步DownloadFile将阻塞调用它的线程。如果是UI线程,那么是的…你的应用程序将不会响应。如果它不是UI线程,那么它仍然具有响应性,但伸缩性较差(这意味着它使用线程来等待,而不是执行工作,因此您的应用程序作为一个整体可以使用相同数量的线程完成更少的工作)
发布于 2017-03-01 15:16:46
client.DownloadFileTaskAsync(new Uri(url), saveLocation).Wait();
// Waiting for download...https://stackoverflow.com/questions/21009162
复制相似问题