先月、私は次の質問をしました。その結果、次のことを学びましたTaskEx.Yield
。
非同期メソッドは、最初の「待機」の前に高価なコードを持つことができますか?
ただし、このメソッドが実際には後続のすべてのコードをアンビエントに送信することに気付きましたTaskScheduler
。真の DI 精神で、私たちのチームは可能な限りアンビエント インスタンスの使用を避けることに同意しましたTaskScheduler
。
次のようなものは素晴らしいでしょう:
public static YieldAwaitable Yield(TaskScheduler taskScheduler)
{
return new YieldAwaitable(taskScheduler);
}
ただし、Async CTP の現在の実装では、次のものしか提供されません。
public static YieldAwaitable Yield()
{
return new YieldAwaitable(SynchronizationContext.Current ?? TaskScheduler.Current);
}
以下は、許容できる効率的な代替手段を提供しますか?
await Task.Factory.StartNew(() => { }, CancellationToken.None, TaskCreationOptions.None, this.TaskScheduler);