Maison > développement back-end > C++ > Comment puis-je utiliser en toute sécurité asynchrone / attendre avec parallèle.Forach pour les appels WCF simultanés?

Comment puis-je utiliser en toute sécurité asynchrone / attendre avec parallèle.Forach pour les appels WCF simultanés?

Susan Sarandon
Libérer: 2025-02-01 03:02:09
original
864 Les gens l'ont consulté

How Can I Safely Use Async/Await with Parallel.ForEach for Concurrent WCF Calls?

Gestion des appels WCF simultanés à l'aide d'Async / Await et TPL DataFlow

Cet article relève le défi de l'exécution de plusieurs appels WCF asynchrones en toute sécurité et efficacement dans une application .NET. L'approche naïve de la nidification await dans Parallel.ForEach conduit souvent à une terminaison prématurée et à des opérations incomplètes.

La solution: TPL Dataflow

La solution recommandée exploite le cadre de flux de données de la bibliothèque parallèle de la tâche (TPL). Plus précisément, l'utilisation TransformBlock et ActionBlock fournit un mécanisme robuste et contrôlé pour les opérations asynchrones parallèles.

Exemple de code refactorisé

Le code suivant montre comment refactoriser le code d'origine à utiliser TransformBlock et ActionBlock pour les appels WCF simultanés:

var ids = new List<string> { "1", "2", "3", "4", "5", "6", "7", "8", "9", "10" };

var getCustomerBlock = new TransformBlock<string, Customer>(
    async i =>
    {
        ICustomerRepo repo = new CustomerRepo();
        return await repo.GetCustomer(i);
    }, new ExecutionDataflowBlockOptions
    {
        MaxDegreeOfParallelism = DataflowBlockOptions.Unbounded // Or specify a limit
    });

var writeCustomerBlock = new ActionBlock<Customer>(c => Console.WriteLine(c.ID));

getCustomerBlock.LinkTo(writeCustomerBlock, new DataflowLinkOptions { PropagateCompletion = true });

foreach (var id in ids)
{
    getCustomerBlock.Post(id);
}

getCustomerBlock.Complete();
writeCustomerBlock.Completion.Wait();
Copier après la connexion

Avantages de cette approche

Cette approche offre plusieurs avantages clés:

  • True parallélisme asynchrone: Il gère correctement les opérations asynchrones dans un contexte parallèle, empêchant la terminaison prématurée.
  • Efficacité améliorée: Les résultats sont traités à mesure qu'ils deviennent disponibles, plutôt que d'attendre que toutes les opérations se terminent.
  • Évolutivité et contrôle: La propriété MaxDegreeOfParallelism permet de contrôler le niveau de concurrence, empêchant l'épuisement des ressources. Ceci est crucial lorsqu'il s'agit d'un grand nombre d'ID.

Cette méthode garantit que les appels WCF asynchrones sont exécutés simultanément tout en conservant une gestion des erreurs et une gestion des ressources appropriés, fournissant une solution plus fiable et efficace.

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