ActionBlockT anpassen

8

Ich möchte eine priorisierte ActionBlock<T> implementieren. So kann ich einigen TInput -Elementen bedingt Priorität geben, indem ich ein Predicate<T> verwende.
Ich lese Parallel Extensions Extras Beispiele und Anleitung zur Implementierung von benutzerdefinierten TPL-Datenflussblöcken .
Aber immer noch nicht herausfinden, wie kann ich dieses Szenario implementieren.
---------------------------- BEARBEITEN --------------------- ------
Es gibt einige Aufgaben, von denen 5 gleichzeitig ausgeführt werden können. Wenn Benutzer die Schaltfläche drücken, sollten einige (abhängig von der Prädikatfunktion) mit der höchsten Priorität ausgeführt werden.
In der Tat schreibe ich diesen Code

%Vor%

Aber es scheint, dass die Priorität überhaupt nicht berücksichtigt wird.
---------------------------- BEARBEITEN ------------------
Ich finde die Tatsache, dass, wenn ich diese Codezeile verwende:

%Vor%

Ursache Anwendung Prioritäten der Aufgaben korrekt beachten, aber nur eine Aufgabe kann gleichzeitig ausgeführt werden, während der erste Code-Block verwendet wird, der im Fließtext angezeigt wird, weil die Anwendung 5 Aufgaben gleichzeitig ausführt, jedoch in unangemessener Reihenfolge.

%Vor%

Aktualisierung:
Tanks zu svick, ich sollte MaxMessagesPerTask für taskSchedulerLow angeben.

    
Rzassar 12.12.2012, 12:19
quelle

1 Antwort

7

Ihre Frage enthält nicht viele Details, daher ist das Folgende nur eine Schätzung dessen, was Sie möglicherweise benötigen.

Ich denke, der einfachste Weg ist, zwei ActionBlock s zu haben, die auf QueuedTaskScheduler von ParallelExtensionsExtras . Sie würden mit dem Prio-Objekt mit hoher Priorität und dann mit dem Prädikat verbinden. Um sicherzustellen, dass die Priorität hoher Priorität Task s nicht wartet, legen Sie MaxMessagesPerTask des Blocks niedriger Priorität fest.

Im Code sieht das etwa so aus:

%Vor%

Dies ist nur eine Skizze dessen, was Sie tun könnten, zum Beispiel verhält sich Completion des zurückgegebenen Blocks nicht korrekt.

    
svick 14.12.2012, 22:17
quelle