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

Мне трудно найти планировщик задач, на котором я могу планировать приоритетные задачи, но также могу справиться "завернутые» задачи. Это что-то вроде того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, что решит эту проблему. Но любые другие предложения приветствуются.

Ответы на вопрос(3)

Ваш ответ на вопрос