Derzeit habe ich eine große Anzahl von C# -Berechnungen (Methodenaufrufe), die sich in einer Warteschlange befinden, die nacheinander ausgeführt wird. Bei jeder Berechnung wird ein Dienst mit hoher Latenz verwendet (Netzwerk, Festplatte ...).Entwurfsmuster-Alternative zu Routinen
Ich wollte Mono-Coroutinen verwenden, damit die nächste Berechnung in der Berechnungswarteschlange fortgesetzt werden kann, während eine vorherige Berechnung auf die Rückkehr des Dienstes mit hoher Latenz wartet. Ich bevorzuge es jedoch, mich nicht auf Mono-Coroutinen zu verlassen.
Gibt es ein Entwurfsmuster, das in reinem C# implementiert werden kann, das es mir ermöglicht, zusätzliche Berechnungen zu verarbeiten, während ich auf die Rückkehr von Diensten mit hoher Latenzzeit warte?
Dank
Update:
Ich brauche eine große Zahl (> 10000) von Aufgaben auszuführen, und jede Aufgabe eines hohen Latenz-Dienst wird. Unter Windows können Sie nicht so viele Threads erstellen.
Update:
Grundsätzlich, ich brauche ein Design-Muster, das die Vorteile emuliert (wie folgt) von Tasklets in Stackless Python (http://www.stackless.com/)
- Huge # Aufgaben
- Wenn ein Task blockiert die nächste Aufgabe in der Warteschlange ausgeführt
- Kein verschwendet CPU-Zyklus
- Minimale Overhead-Switching zwischen Aufgaben
Können Sie hier eine bessere Lösung für Korotinen als Lösung vorschlagen? Es scheint nach einem (ausgeglichenen) Threading zu fragen, wie in der Antwort von dtb. –
Nun, ich muss eine große Anzahl (> 10000) von Aufgaben ausführen, und jede Aufgabe wird einen Dienst mit hoher Latenz verwenden. Unter Windows können Sie nicht so viele Threads erstellen. – jameszhao00
Klingt wie ein Job für ThreadPool, +1 für jscharf –