Program planujący zadania o ograniczonej współbieżności (z priorytetem zadania) obsługujący zadania opakowane

Trudno mi znaleźć harmonogram zadań, na którym mogę zaplanować priorytetowe zadania, ale mogę również obsługiwać „zawinięte” zadania. To jest coś takiegoTask.Run próbuje rozwiązać, ale nie można określić harmonogramu zadańTask.Run. UżywamQueuedTaskScheduler zDodatki do rozszerzeń równoległych Przykłady rozwiązać wymaganie priorytetu zadania (sugerowane przez tosłupek).

Oto mój przykład:

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<Task> 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);
    }
}

Typowy wynik powyższego przykładu to:

Start 4
Start 5
Start 6
Start 1
Start 2
Start 3
End 4
End 3
End 5
End 2
End 1
End 6

Chcę:

Start 4
End 4
Start 5
End 5
Start 6
End 6
Start 1
End 1
Start 2
End 2
Start 3
End 3

EDYTOWAĆ:

Myślę, że szukam harmonogramu zadań, podobnego doQueuedTaskSchedulerto rozwiąże ten problem. Ale wszelkie inne sugestie są mile widziane.

questionAnswers(3)

yourAnswerToTheQuestion