2016-12-31 14 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は、Tasksおよびasync/awaitよりも前のイベントベースのAPIです。代わりにWebClient.DownloadFileTaskAsyncを待つ必要があります。

0

await演算子は、非同期メソッドでタスクに適用されます。つまり、タスクを返すメソッドを待つことができます。

WebClient.DownloadFileAsyncなしタスクを返すが、WebClient.DownloadFileTaskAsyncは返す。

関連する問題