TaskCompletionSource表示Async

时间:2012-03-29 03:31:40

标签: asynchronous

抱歉,我对线程的了解仍然有点弱。

只是四处看看。如果使用TaskCompletionSource来表示某些IO异步操作。

就像说一些DownloadAsync一样,你并没有像我理解的那样捆绑一个线程?

我一直在想,当异步发生某些事情时,它必须捆绑一个线程吗?

任何澄清都表示赞赏。

由于

1 个答案:

答案 0 :(得分:1)

webclient的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

找到