私の知る限り、知っているのは、ある時点で、そのSetResult
またはSetException
メソッドが呼び出さTask<T>
れて、そのTask
プロパティを介して公開を完了することです。
言い換えれば、それはa Task<TResult>
とその完成のプロデューサーとして機能します。
Funcを非同期で実行する方法が必要で、その操作を表すタスクがある場合。
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
?