質問
私の実施方法 Task<Result> StartSomeTask()
とが知らの結果はすでに前の方法が呼び出されます。の作成方法を教えてください、 タスク<T> とするということはありますか?
こうっていう:
private readonly Result theResult = new Result();
public override Task<Result> StartSomeTask()
{
var task = new Task<Result>(() => theResult);
task.RunSynchronously(CurrentThreadTaskScheduler.CurrentThread);
return task;
}
がより良い解決するのか
解決
private readonly Result theResult = new Result();
public override Task<Result> StartSomeTask()
{
var taskSource = new TaskCompletionSource<Result>();
taskSource.SetResult(theResult);
return taskSource.Task;
}
他のヒント
がお使いいただけます。純4.5利用できる Task.FromResult
:
public static Task<TResult> FromResult<TResult>(TResult result);
の作成に失敗したタスクの使用 Task.FromException
:
public static Task FromException(Exception exception);
public static Task<TResult> FromException<TResult>(Exception exception);
.純4.6追加 Task.CompletedTask
が必要な場合以外の一般 Task
.
public static Task CompletedTask { get; }
回避策のための古いバージョンです。純益:
がお使いいただけます。NET4.0との非同期に的を絞ったパック(またはAsyncCTP)を使用でき
TaskEx.FromResult
です。取得単一般
Task
前ます。純4.6利用できることTask<T>
らTask
すぐ通話Task.FromResult<object>(null)
またはTask.FromResult(0)
.
ノーリターン値を持つタスクは、.NET 4.6 タスク追加しました.CompletedTaskするます。
これはTaskStatus.RanToCompletionにすでにあるタスクを返します。それはおそらく、同じインスタンスを毎回返しますが、ドキュメントはその事実にカウントしない警告を表示します。
あなたがRxの、代替を使用している場合Observable.Return(結果).ToTask()です。
パラメータを指定せずにTask.WhenAllを呼び出すと、完了したタスクを返します。
Task task = Task.WhenAll();
所属していません StackOverflow