我对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;
}