Планировщик задач с ограниченным уровнем параллелизма (с приоритетом задачи), обрабатывающий упакованные задачи
Мне трудно найти планировщик задач, на котором я могу планировать приоритетные задачи, но также могу справиться "завернутые» задачи. Это что-то вроде тогоTask.Run пытается решить, но вы не можете указать планировщик задач дляTask.Run
, Я использовалQueuedTaskScheduler
отПримеры параллельных расширений для решения задачи приоритета задачи (также предлагается этимсообщение).
Вот мой пример:
class Program
{
private static QueuedTaskScheduler queueScheduler = new QueuedTaskScheduler(targetScheduler: TaskScheduler.Default, maxConcurrencyLevel: 1);
private static TaskScheduler ts_priority1;
private static TaskScheduler ts_priority2;
static void Main(string[] args)
{
ts_priority1 = queueScheduler.ActivateNewQueue(1);
ts_priority2 = queueScheduler.ActivateNewQueue(2);
QueueValue(1, ts_priority2);
QueueValue(2, ts_priority2);
QueueValue(3, ts_priority2);
QueueValue(4, ts_priority1);
QueueValue(5, ts_priority1);
QueueValue(6, ts_priority1);
Console.ReadLine();
}
private static Task QueueTask(Func f, TaskScheduler ts)
{
return Task.Factory.StartNew(f, CancellationToken.None, TaskCreationOptions.HideScheduler | TaskCreationOptions.DenyChildAttach, ts);
}
private static Task QueueValue(int i, TaskScheduler ts)
{
return QueueTask(async () =>
{
Console.WriteLine("Start {0}", i);
await Task.Delay(1000);
Console.WriteLine("End {0}", i);
}, ts);
}
}
Типичный вывод приведенного выше примера:
Start 4
Start 5
Start 6
Start 1
Start 2
Start 3
End 4
End 3
End 5
End 2
End 1
End 6
Что я хочу это:
Start 4
End 4
Start 5
End 5
Start 6
End 6
Start 1
End 1
Start 2
End 2
Start 3
End 3
РЕДАКТИРОВАТЬ:
Я думаю я'ищу планировщик задач, похожий наQueuedTaskScheduler
, что решит эту проблему. Но любые другие предложения приветствуются.