Ich habe mich daran gewöhnt, Parallel.For () in den parallelen Erweiterungen von .Net zu verwenden, da es eine einfache Art ist, Code zu parallelisieren, ohne manuell Threads starten und warten zu müssen (was fiddly sein kann). Ich schaue jetzt auf eine Endlosschleife (tue etwas, bis ich signalisiere, dass es aufhört), das ich parallelisieren möchte, es gibt keine freie Argument Parallel.For () Überladung, um dies zu tun, also frage mich, was der beste Ansatz hier wäre Sein. Im Prinzip könnte ich einfach etwas tun wie:
%Vor%Aber ich vermute, dass dies möglicherweise kein erwartetes / effizientes Muster für die Arbeitspartitionierungslogik ist, das (?)
verarbeiten kannEine andere Option ist etwas wie:
%Vor%Aber das scheint unelegant und kann auch zu ineffizienter Arbeitspartitionierung führen.
Im Moment ist mein Instinkt, dies manuell zu tun, indem ich meine eigenen Threads erstelle und pflege, aber ich wäre daran interessiert, einige Rückmeldungen / Meinungen dazu zu bekommen. Danke.
=== UPDATE ===
Ich verwende eine vereinfachte Version des Codes aus dem Artikel in der angenommenen Antwort (Ich habe den ParallelOptions-Parameter entfernt). Hier ist der Code ...
%Vor%Eine Beispielverwendung wäre:
%Vor%Stephen Toub hat einen Beitrag über Implementierung parallel während mit Parallel.ForEach .
Wenn Sie (wirklich) etwas Unendliches wollen, dann wollen Sie es auf möglichst wenigen Kernen. Keines der Parallel.For___
wäre eine gute Wahl.
Was Sie (wahrscheinlich) benötigen, ist ein separater Thread oder eine Aufgabe, die mit der LongRunning-Option erstellt wurde.
Und dann lassen Sie es auf einen Semaphor warten, oder rufen Sie Sleep () als letzten Ausweg so oft wie möglich.
Wenn man bedenkt, dass es sich um eine Infinit-Kalkül-Anfrage handelt, aber Sie müssen bei jedem "Zyklus" einen finit-Zustand haben, würde ich sagen, dass ich eine Lösung mit einer externen for(;;)
-Schleife ändern würde
Parallel.ForEach(...)
ruft einige Ereignisse / Statusänderungen auf. Wie ein Monitor
Signal, event
Benachrichtigung, oder so ähnlich ...
Tags und Links .net c# parallel-processing parallel-extensions parallel-for