Aufgabenplaner mit eingeschränkter Parallelität (mit Aufgabenpriorität) für die Verarbeitung verpackter AufgabenC#

Ein Treffpunkt für C#-Programmierer
Anonymous
 Aufgabenplaner mit eingeschränkter Parallelität (mit Aufgabenpriorität) für die Verarbeitung verpackter Aufgaben

Post by Anonymous »

Es fällt mir schwer, einen Aufgabenplaner zu finden, mit dem ich priorisierte Aufgaben planen, aber auch „verpackte“ Aufgaben bearbeiten kann. Es ist so etwas wie das, was Task.Run zu lösen versucht, aber Sie können für Task.Run keinen Aufgabenplaner angeben.
Ich habe einen QueuedTaskScheduler aus den Parallel Extensions Extras-Beispielen (nicht mehr verfügbar) verwendet, um die Aufgabenprioritätsanforderung zu lösen (ebenfalls in diesem Beitrag vorgeschlagen).
Hier ist mein Beispiel:

Code: Select all

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);
}
}
Die typische Ausgabe des obigen Beispiels ist:

Code: Select all

Start 4
Start 5
Start 6
Start 1
Start 2
Start 3
End 4
End 3
End 5
End 2
End 1
End 6
Was ich will ist:

Code: Select all

Start 4
End 4
Start 5
End 5
Start 6
End 6
Start 1
End 1
Start 2
End 2
Start 3
End 3
BEARBEITEN:
Ich glaube, ich suche nach einem Aufgabenplaner, ähnlich dem QueuedTaskScheduler, der dieses Problem löst. Aber auch alle anderen Vorschläge sind willkommen.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post