TaskCompletionSource<>
の内部動作について私に不明な点があります。TaskCompletionSourceを持つTaskCreationOptionsの目的は何ですか?
Factory
を使用して簡単なTask<>
を作成するとき、私はそれではなく、新しいスレッドで実行されますを、指定しない限り、私は、このタスクは、スレッドプールにエンキューされることを期待します。
TaskCompletionSource
の私の理解は、タスクが終了したとき、または失敗したときにトリガする責任があり、スレッドを管理する方法を完全に制御しているということです。 しかし、TaskCompletionSource
のctorによってTaskCreationOptions
を指定することができます。これは、Scheduler
がタスク自体を処理できないことを期待していたため、私を混乱させます。
TaskCompletionSource<>
の文脈でTaskCreationOptions
の目的は何ですか?ここで
は使用例です:
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またはタスクに合格し、その結果に基づいて何かをする可能性がありますと仮定します。次のコードは、実際に例外をスローしますこれらのオプションの1つ(このタスクを処理しているカスタムコード内) – Servy