完了したタスクを作成する 質問する

完了したタスクを作成する 質問する

メソッドを実装しているのです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;
}

もっと良い解決策はありますか?

ベストアンサー1

.NET 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);

.NET 4.6の追加Task.CompletedTask非ジェネリックが必要な場合Task

public static Task CompletedTask { get; }

古いバージョンの .NET の回避策:

  • Async Targetting Pack (または AsyncCTP) を使用して .NET 4.0 をターゲットにする場合は、代わりに を使用できますTaskEx.FromResult

  • .NET 4.6 より前の非ジェネリックを取得するには、が から派生しているTaskという事実を利用し、または を呼び出すだけです。Task<T>TaskTask.FromResult<object>(null)Task.FromResult(0)

おすすめ記事