2016-12-31 81 views
-1
private Queue<string> _downloadUrls = new Queue<string>(); 

     private void downloadFile(IEnumerable<string> urls) 
     { 
      foreach (var url in urls) 
      { 
       _downloadUrls.Enqueue(url); 
      } 

      DownloadFile(); 
     } 

     private async Task DownloadFile() 
     { 
      if (_downloadUrls.Any()) 
      { 
       WebClient client = new WebClient(); 
       client.DownloadProgressChanged += ProgressChanged; 
       client.DownloadFileCompleted += Completed; 

       var url = _downloadUrls.Dequeue(); 
       string FileName = url.Substring(url.LastIndexOf("/") + 1, 
          (url.Length - url.LastIndexOf("/") - 1)); 

       await client.DownloadFileAsync(new Uri(url), "C:\\Test4\\" + FileName); 
       return; 
      } 
     } 

的错误就行了:为什么我得到错误不能等待'空'?

await client.DownloadFileAsync(new Uri(url), "C:\\Test4\\" + FileName); 

我怎样才能解决这个错误吗? 为什么发生? 我给了我想的所有细节。

我添加的代码的其余部分,也许它需要。

+0

我编辑我的问题添加了其余的代码。将其更改为异步任务,但仍然收到相同的错误。 –

回答

7

WebClient.DownloadFileAsync是基于事件的API,它早于任务和异步/等待。您需要等待WebClient.DownloadFileTaskAsync

0

的运营商的await应用到任务异步方法这意味着你可以在返回任务的方法等待。

WebClient.DownloadFileAsync确实不是返回一个任务但WebClient.DownloadFileTaskAsync呢。