5

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

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

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

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

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

注意:我知道该示例实际上不会编译:)

4

2 回答 2

7

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

TaskScheduler taskScheduler = new LowPriorityTaskScheduler();
TaskFactory taskFactory = new TaskFactory(taskScheduler);
...
await taskFactory.StartNew(FooAsync);
于 2012-01-27T18:12:07.750 回答
-1

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

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

ThreadPriority检查枚举的其他值。

于 2012-01-27T18:05:44.290 回答