В прошлом месяце я задал следующий вопрос, в результате которого я узнал о TaskEx.Yield
:
Могут ли методы async иметь дорогой код перед первым "ожиданием" ?
Однако с тех пор я понял, что этот метод фактически передает весь последующий код в ambient 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);