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。
質問:
誰かが、私が持っていない架空の状況に 直接関連するシナリオを例として説明できますか?TaskCompletionSourceTask.Factory.StartNew