我有一些方法Task<T>可以随意返回await.我想让这些任务在自定义TaskScheduler而不是默认的上执行.
var task = GetTaskAsync ();
await task;
Run Code Online (Sandbox Code Playgroud)
我知道我可以创建一个新的TaskFactory (new CustomScheduler ())并StartNew ()从中做一个,但是StartNew ()需要一个动作并创建它Task,我已经拥有了Task(在幕后由a返回TaskCompletionSource)
我怎样才能指定我自己TaskScheduler的await?
我还在学习整个任务概念和TPL.根据我目前的理解,SynchronizationContext函数(如果存在)用于await在某处调度任务.另一方面,Task类中的函数不使用上下文,对吧?
因此,例如,Task.Run(...)总是在线程池的工作线程上调度操作并SynchronizationContext.Current完全忽略.await Foobar()将使用上下文执行生成的任务后await?
如果这是真的,我的问题是:我怎样才能获得a Task,实际运行一个动作但是被派遣使用SynchronizationContext.Current.Send/Post?
任何人都可以推荐一个很好的介绍SynchronizationContext,特别是在框架的其余部分使用它们的时间和方式?在MSDN似乎很沉默的类.顶级Google点击(此处和此处)似乎仅适用于Windows Forms调度.Stephen Cleary撰写了一篇文章,很好地了解了已经存在的背景以及它们是如何工作的,但我不了解实际使用的地点和时间.