我還不清楚TaskCompletionSource<>
的內部運作情況。TaskCreationOptions與TaskCompletionSource的用途是什麼?
當使用Factory
創建一個簡單的Task<>
,我希望這個任務在一個線程池來排隊,除非我指定,它會在一個新線程上運行,而不是。
我對TaskCompletionSource
的理解是,我負責在任務結束或失敗時觸發,並且我完全控制如何管理線程。 但是,TaskCompletionSource
的ctor允許我指定TaskCreationOptions
,這讓我感到困惑,因爲我期待Scheduler
無法處理任務本身。
TaskCreationOptions
在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;
}
好了,你可以看到通過所產生的任務中使用,所以我想這可能是一些代碼可以根據結果傳遞一個TCS或任務,做一些其中一個選項(在處理此任務的自定義代碼中)。 – Servy