抱歉,我对线程的了解仍然有点弱。
只是四处看看。如果使用TaskCompletionSource来表示某些IO异步操作。
就像说一些DownloadAsync一样,你并没有像我理解的那样捆绑一个线程?
我一直在想,当异步发生某些事情时,它必须捆绑一个线程吗?
任何澄清都表示赞赏。
由于
答案 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
找到