我对TaskCompletionSource<>
.
使用 创建简单Task<>
时Factory
,我希望此任务在线程池中排队,除非我指定TaskCreationOptions.LongRunning
,否则它将在新线程中运行。
我对 的理解TaskCompletionSource
是,我负责在任务结束或失败时触发,并且我可以完全控制如何管理线程。但是, ctorTaskCompletionSource
允许我指定 a TaskCreationOptions
,这让我感到困惑,因为我期待Scheduler
无法处理任务本身。
TaskCreationOptions
在 a 的上下文中的目的是TaskCompletionSource<>
什么?
这是一个使用示例:
public Task<WebResponse> Download(string url)
{
TaskCompletionSource<WebResponse> tcs =
new TaskCompletionSource<WebResponse>(TaskCreationOptions.LongRunning);
var client = (HttpWebRequest)HttpWebRequest.Create(url);
var async = client.BeginGetResponse(o =>
{
try
{
WebResponse resp = client.EndGetResponse(o);
tcs.SetResult(resp);
}
catch (Exception ex)
{
tcs.SetException(ex);
}
}, null);
return tcs.Task;
}