AFAIK、それが知っているのは、ある時点で、そのSetResult
またはSetException
メソッドが呼び出されて、そのプロパティTask<T>
を介して公開を完了することです。Task
言い換えれば、それはaTask<TResult>
とその完成のプロデューサーとして機能します。
私はここで例を見ました:
Func<T>
非同期で実行する方法が必要で、Task<T>
その操作を表す方法が必要な場合。
public static Task<T> RunAsync<T>(Func<T> function)
{
if (function == null) throw new ArgumentNullException(“function”);
var tcs = new TaskCompletionSource<T>();
ThreadPool.QueueUserWorkItem(_ =>
{
try
{
T result = function();
tcs.SetResult(result);
}
catch(Exception exc) { tcs.SetException(exc); }
});
return tcs.Task;
}
私が持っていなかった場合に使用できますTask.Factory.StartNew
-しかし、私は持っていますTask.Factory.StartNew
。
質問:
誰かが、私が持っていない架空の状況に 直接関連するシナリオを例として説明できますか?TaskCompletionSource
Task.Factory.StartNew