Maison > développement back-end > C++ > Comment utiliser correctement les lambdas «asynchrones» avec `parallèle.ForEach»?

Comment utiliser correctement les lambdas «asynchrones» avec `parallèle.ForEach»?

Patricia Arquette
Libérer: 2025-02-01 03:16:08
original
451 Les gens l'ont consulté

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

Utiliser le parallèle lambda asynchrone parallèle

Une méthode de collecte de traitement parallèle consiste à utiliser la méthode

avec l'expression de lambda. Cependant, si vous souhaitez appeler la méthode asynchrone dans l'expression de Lambda, vous rencontrerez quelques problèmes.

Parallel.ForEach Le problème est que les threads créés ne sont que des threads d'arrière-plan, et cette méthode n'attendra pas leur achèvement. Vous pouvez le voir dans l'exemple suivant:

Parallel.ForEach Le problème est que sera 0, car l'appel de

n'attendra pas que Lambda se termine. Si les mots clés sont supprimés, la méthode est indiquée ci-dessous:
var bag = new ConcurrentBag<object>();
Parallel.ForEach(myCollection, async item =>
{
    // 预处理
    var response = await GetData(item);
    bag.Add(response);
    // 后处理
});
var count = bag.Count;
Copier après la connexion

count Cette méthode est efficace, mais elle désactive les avantages de Parallel.ForEach et vous oblige à effectuer un traitement anormal manuel. async

<实> Comment réaliser l'utilisation de Lambda Paradlel asynchrone.ForEach
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;
Copier après la connexion

await Il existe deux façons d'atteindre l'utilisation de

mot-clé

Cycle: <.> 1. Simple et parallélisation

await Cette méthode est très simple, seules quelques lignes de code sont nécessaires: Parallel.ForEach

<.> 2. Complexe et parallélisation

Cette méthode est plus compliquée, mais elle peut mieux contrôler le processus de parallélisation. Pour plus de détails, veuillez consulter l'article ForEachasync de Stephen Toub.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal