Явное указание TaskScheduler для неявно запланированного метода - PullRequest
5 голосов
/ 27 января 2012

У меня есть следующий метод, который использует неявное планирование:

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

Однако с одного конкретного сайта вызовов я хочу, чтобы он выполнялся в планировщике с низким приоритетом вместо значения по умолчанию:

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

Как мне этого добиться?Это похоже на очень простой запрос, но у меня полный ментальный блок!

Примечание: я знаю, что пример на самом деле не скомпилируется:)

Ответы [ 2 ]

7 голосов
/ 27 января 2012

Создайте свой собственный экземпляр TaskFactory, инициализированный с нужным вам планировщиком.Затем вызовите StartNew в этом случае:

TaskScheduler taskScheduler = new LowPriorityTaskScheduler();
TaskFactory taskFactory = new TaskFactory(taskScheduler);
...
await taskFactory.StartNew(FooAsync);
0 голосов
/ 27 января 2012

Вы можете установить приоритет потока, но в рамках метода потока:

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

Проверьте другие значения ThreadPriority enum.

...