Begrenzung der Anzahl der gleichzeitig ausgeführten Aufgaben

8

Betrachten Sie dies als einen riesigen Pool von Aufgaben:

%Vor%

Was, wenn ich nur 3 Aufgaben gleichzeitig ausführen möchte? Wie würde ich das im Code implementieren?

    
Kjensen 15.10.2011, 00:49
quelle

4 Antworten

11

Ein weniger kompliziertes Beispiel als die MSDN-Version wäre die Verwendung von Parallel.Invoke, um den maximalen Parallelitätsgrad einzustellen:

%Vor%

Parallel.Invoke () blockiert jedoch, bis alle parallelen Operationen beendet sind (dh, dass kein Code über die parallel.invoke hinaus ausgeführt wird, bis sie alle abgeschlossen sind). Wenn dies für Sie nicht funktioniert, müssen Sie am Ende Ihren eigenen Aufgabenplaner erstellen, wie der von Daniel verlinkte MSDN-Artikel zeigt.

    
Gary.S 15.10.2011, 03:14
quelle
8

Ich habe dieses Beispiel auf MSDN gefunden. Ich glaube, es implementiert, was Sie erreichen wollen.

    
Daniel Pratt 15.10.2011 01:08
quelle
0

Sie möchten also die Anzahl gleichzeitiger Aufgaben angeben. Seien Sie gewarnt, dass dies eine schlechte Design-Idee ist - zumindest sollten Sie in den meisten Fällen entscheiden, wie viele Aufgaben gleichzeitig ausgeführt werden sollen. Wenn Sie die Methode Task.Factory.StartNew verwenden, um Aufgaben auf diese Weise ohne zusätzliche Parameter zu erstellen, sollen sie SOFORT (so schnell wie möglich) ausgeführt werden. Daher sollten Sie die Anzahl für die gleichzeitige Ausführung nicht explizit angeben.

Was bedeutet in diesem Fall so schnell wie möglich? Der Task-Manager entscheidet, ob er alle sofort startet, oder ob einige von ihnen warten oder auf andere Aufgaben warten, bis er beendet ist.

Sie können eine Art manuelle Synchronisierung verwenden, um Ihr Ziel zu erreichen. Ich meine wie ein Semaphor. Ссылка

Wenn Sie keine andere Arbeit machen müssen und nur auf die Aufgaben warten wollen, würde ich Parallel.Invoke bevorzugen, wie von Gary S vorgeschlagen.

    
Al Kepp 15.10.2011 01:03
quelle
0

Mein Blog-Post zeigt, wie es geht tun Sie dies sowohl mit Aufgaben als auch mit Aktionen und bietet ein Beispielprojekt, das Sie herunterladen und ausführen können, um beides in Aktion zu sehen.

Im ursprünglichen Poster wurde nicht angegeben, ob sie Aktionen oder Aufgaben bevorzugen, und manchmal ist es nicht einfach, von einem zum anderen zu wechseln, daher stelle ich hier beide Lösungen vor.

Mit Aktionen

Wenn Sie Aktionen verwenden, können Sie die integrierte Funktion .Net Parallel.Invoke verwenden. Hier beschränken wir uns darauf, höchstens 3 Threads parallel zu betreiben.

%Vor%

Mit Aufgaben

Da Sie hier jedoch Tasks verwenden, gibt es keine integrierte Funktion. Sie können jedoch das verwenden, das ich in meinem Blog zur Verfügung stelle.

%Vor%

Und dann erstellen Sie Ihre Liste von Aufgaben und rufen Sie die Funktion, um sie laufen zu lassen, mit maximal 3 gleichzeitige gleichzeitig, können Sie dies tun:

%Vor%     
deadlydog 28.04.2017 03:03
quelle