Планировщик задач с ограниченным уровнем параллелизма (с приоритетом задач), обрабатывающий упакованные задачиC#

Место общения программистов C#
Ответить
Anonymous
 Планировщик задач с ограниченным уровнем параллелизма (с приоритетом задач), обрабатывающий упакованные задачи

Сообщение Anonymous »

Мне трудно найти планировщик задач, в котором я мог бы планировать приоритетные задачи, но также мог бы обрабатывать «обернутые» задачи. Это что-то вроде того, что пытается решить Task.Run, но вы не можете указать планировщик задач для Task.Run.
Я использовал QueuedTaskScheduler из примеров дополнительных расширений Parallel Extensions (больше не доступен) для решения требования приоритета задачи (также предложенного в этом сообщении).
Вот мой пример:

Код: Выделить всё

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, который решит эту проблему. Но любые другие предложения приветствуются.

Подробнее здесь: https://stackoverflow.com/questions/133 ... -wrapped-t
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»