質問

私の実施方法 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();
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top