11
TaskCompletionSource <T>はいつ使用する必要がありますか?
私の知る限り、知っているのは、ある時点で、その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?