Verwenden Sie asynchrones Lambda parallel
Eine Methode zur parallelen Verarbeitungssammlung besteht darin, die
-Methode mit Lambda -Expression zu verwenden. Wenn Sie jedoch die asynchrone Methode im Lambda -Ausdruck aufrufen möchten, werden Sie auf einige Probleme stoßen.
Parallel.ForEach
Das Problem ist, dass erstellte Threads nur Hintergrund -Threads sind, und diese Methode wartet nicht auf ihre Fertigstellung. Sie können dies im folgenden Beispiel sehen:
Parallel.ForEach
Das Problem ist, dass 0 sein wird, da der Anruf von
<code class="language-csharp">var bag = new ConcurrentBag<object>(); Parallel.ForEach(myCollection, async item => { // 预处理 var response = await GetData(item); bag.Add(response); // 后处理 }); var count = bag.Count;</code>
count
Diese Methode ist wirksam, deaktiviert jedoch die Vorteile von Parallel.ForEach
und erfordert, dass Sie eine manuelle abnormale Behandlung durchführen. async
<code class="language-csharp">var bag = new ConcurrentBag<object>(); Parallel.ForEach(myCollection, item => { // 预处理 var responseTask = GetData(item); // 注意这里去掉了await responseTask.Wait(); var response = responseTask.Result; bag.Add(response); // 后处理 }); var count = bag.Count;</code>
await
Es gibt zwei Möglichkeiten, die Verwendung von
Zyklus zu erreichen: <.> 1. Einfach und Parallelisierung
await
Diese Methode ist sehr einfach, nur wenige Codezeilen sind erforderlich: Parallel.ForEach
<.> 2. Komplex und Parallelisierung
Diese Methode ist komplizierter, kann jedoch den Vorgang der Parallelisierung besser steuern. Weitere Informationen finden Sie im Artikel von Stephen Toub.Das obige ist der detaillierte Inhalt vonWie benutze ich 'async` lambdas mit' parallel.foreach 'richtig?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!