2012-03-29 4 views
1

スレッドに関する私の知識はまだまだ弱いです。Asyncを表すTaskCompletionSource

周囲をちょっと読んでください。 TaskCompletionSourceを使用してIO非同期操作を表現している場合。

いくつかのDownloadAsyncのように、わかっているようにスレッドを束縛していないのですか?

いつも何かが非同期的に起こっていると思っていましたが、スレッドを縛っていなければなりませんか?

どのような説明もありがとうございます。

おかげ

答えて

1

WebクライアントのDownloadFileAsyncは、イベントベースの非同期モデルにTPLを適用するための良い機会を提供します。 DownloadFileAsyncの呼び出しを含むアクションがすぐに完了するため、実際の作業はDownloadFileCompletedイベントがトリガーされるまで行われません。これは、TaskCompletionSourceが動作する場所です。

var downloadCompletionSource = new TaskCompletionSource<bool>(); 
    webClient.DownloadFileCompleted+= 
       (s, e) => 
        { 
         if (e.Error != null) 
          { 
           downloadCompletionSource.SetException(e.Error); 
          } 
          else 
          { 
           downloadCompletionSource.SetResult(true); 
          } 
         } 

        }; 

      webClient.DownloadFileAsync(new Uri(downloadUrl), destinationFilePath); 

      try 
      { 
       downloadCompletionSource.Task.Wait(); 

      } 
      catch (AggregateException e) 
      { 

      } 

詳細はin MSDN

ここで見つけることができます
関連する問題