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

时间:2012-01-27 18:01:51

标签: c# .net task-parallel-library async-ctp

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

private async Task FooAsync()
{
   await Something();
   DoAnotherThing();
   await SomethingElse();
   DoOneLastThing();
}

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

private async Task BarAsync()
{
   await Task.Factory.StartNew(() => await FooAsync(), 
      ...,
      ...,
      LowPriorityTaskScheduler);
}

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

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

2 个答案:

答案 0 :(得分:7)

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

TaskScheduler taskScheduler = new LowPriorityTaskScheduler();
TaskFactory taskFactory = new TaskFactory(taskScheduler);
...
await taskFactory.StartNew(FooAsync);

答案 1 :(得分:-1)

您可以设置线程优先级,但在线程的方法中:

System.Threading.Thread.CurrentThread.Priority = System.Threading.ThreadPriority.BelowNormal;

检查ThreadPriority枚举的其他值。