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.
Ich habe dieses Beispiel auf MSDN gefunden. Ich glaube, es implementiert, was Sie erreichen wollen.
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.
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.
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%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%Tags und Links c# task-parallel-library c#-4.0