我有以下使用隐式调度的方法:
private async Task FooAsync()
{
await Something();
DoAnotherThing();
await SomethingElse();
DoOneLastThing();
}
但是,从一个特定的呼叫站点,我希望它运行在低优先级的调度程序而不是默认值:
private async Task BarAsync()
{
await Task.Factory.StartNew(() => await FooAsync(),
...,
...,
LowPriorityTaskScheduler);
}
我如何实现这一目标?这似乎是一个非常简单的问题,但我有一个完整的心理障碍!
注意:我知道这个例子实际上不会编译:)
答案 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
枚举的其他值。