Heim > Backend-Entwicklung > C++ > Wie benutze ich 'async` lambdas mit' parallel.foreach 'richtig?

Wie benutze ich 'async` lambdas mit' parallel.foreach 'richtig?

Patricia Arquette
Freigeben: 2025-02-01 03:16:08
Original
403 Leute haben es durchsucht

How to Properly Use `async` Lambdas with `Parallel.ForEach`?

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

nicht darauf warten wird, dass Lambda abgeschlossen ist. Wenn Schlüsselwörter gelöscht werden, ist die Methode unten dargestellt:
<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>
Nach dem Login kopieren

count Diese Methode ist wirksam, deaktiviert jedoch die Vorteile von Parallel.ForEach und erfordert, dass Sie eine manuelle abnormale Behandlung durchführen. async

So erreichen Sie die Verwendung von asynchronem Lambda -Paradlel.foreach
<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>
Nach dem Login kopieren

await Es gibt zwei Möglichkeiten, die Verwendung von

Schlüsselwort

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage