メソッドを実装しているのです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>
Task
Task.FromResult<object>(null)
Task.FromResult(0)