Gewährleistung begrenzter Parallelität und Nachrichtenreihenfolge in C#
Einführung:
Bei der Verarbeitung einer großen Anzahl von Aufgaben Parallel dazu wird es entscheidend, die maximale Anzahl gleichzeitig ausgeführter Aufgaben zu kontrollieren. Dies kann einer Ressourcenerschöpfung vorbeugen und eine effiziente Aufgabenausführung gewährleisten. Darüber hinaus kann es erforderlich sein, die Reihenfolge der Aufgabenausführung beizubehalten.
Kontrolle der maximalen Anzahl paralleler Aufgaben:
1. Verwenden Sie MaxDegreeOfParallelism:
Parallel.ForEach bietet eine praktische Möglichkeit, Aufgaben zu parallelisieren, und ermöglicht Ihnen die Angabe des maximalen Parallelitätsgrads (die maximale Anzahl gleichzeitiger Aufgaben). Indem Sie diesen Wert auf einen gewünschten Grenzwert festlegen, z. B. 10, können Sie die Anzahl der gleichzeitig verarbeiteten Aufgaben begrenzen.
Sicherung der Nachrichtenreihenfolge:
1. Verwenden Sie die Foreach-Schleife:
Anstatt Task.Factory.StartNew zu verwenden, sollten Sie erwägen, eine foreach-Schleife zu verwenden, um Nachrichten sequentiell zu verarbeiten. Dadurch wird sichergestellt, dass Nachrichten in der Reihenfolge der Sammlung verarbeitet werden.
foreach (var msg in messages) { Process(msg); }
2. Partitionierer verwenden:
Wenn Sie aus Leistungsgründen die Nachrichtenverarbeitung parallelisieren müssen, können Sie die Partitioner-Klasse verwenden, um die Nachrichtensammlung in Blöcke aufzuteilen und diese parallel zu verarbeiten. Der OrderablePartitioner kann verwendet werden, um die Reihenfolge der Nachrichten innerhalb jedes Blocks beizubehalten.
var partitioner = Partitioner.Create(messages, true); Parallel.ForEach(partitioner, chunk => { foreach (var msg in chunk) { Process(msg); } });
Das obige ist der detaillierte Inhalt vonWie steuere ich die Parallelität und behalte die Nachrichtenreihenfolge in C# bei?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!