为隐式调度的方法明确指定TaskScheduler

Law*_*eld 5 .net c# task-parallel-library async-ctp

我有以下方法使用隐式调度:

private async Task FooAsync()
{
   await Something();
   DoAnotherThing();
   await SomethingElse();
   DoOneLastThing();
}
Run Code Online (Sandbox Code Playgroud)

但是,从一个特定的调用站点,我希望它运行在低优先级调度程序而不是默认值:

private async Task BarAsync()
{
   await Task.Factory.StartNew(() => await FooAsync(), 
      ...,
      ...,
      LowPriorityTaskScheduler);
}
Run Code Online (Sandbox Code Playgroud)

我该如何实现这一目标?这似乎是一个非常简单的问题,但我有一个完整的心理障碍!

注意:我知道这个例子实际上不会编译:)

Ste*_*ary 7

创建您自己的TaskFactory实例,使用您想要的调度程序进行初始化.然后调用StartNew该实例:

TaskScheduler taskScheduler = new LowPriorityTaskScheduler();
TaskFactory taskFactory = new TaskFactory(taskScheduler);
...
await taskFactory.StartNew(FooAsync);
Run Code Online (Sandbox Code Playgroud)