Heim >Backend-Entwicklung >C++ >Wie kann ich Async/Wartee mit parallel.foreach für gleichzeitige WCF -Anrufe sicher verwenden?

Wie kann ich Async/Wartee mit parallel.foreach für gleichzeitige WCF -Anrufe sicher verwenden?

Susan Sarandon
Susan SarandonOriginal
2025-02-01 03:02:09867Durchsuche

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

Umgang mit gleichzeitigen WCF -Aufrufen mit Async/Awit und TPL DataFlow

Dieser Artikel befasst sich mit der Herausforderung der sicheren und effizienten Ausführung mehrerer asynchroner WCF -Aufrufe in einer .NET -Anwendung. Der naive Ansatz des Verschachtelns await innerhalb von Parallel.ForEach führt häufig zu vorzeitiger Beendigung und unvollständiger Operationen.

Die Lösung: TPL DataFlow

Die empfohlene Lösung nutzt das Datenflow -Framework der Aufgabe Parallel Library (TPL). Insbesondere liefert die Verwendung von TransformBlock und ActionBlock einen robusten und kontrollierten Mechanismus für parallele asynchrone Operationen.

neuer Codebeispiel

Der folgende Code zeigt, wie der ursprüngliche Code für gleichzeitige WCF -Aufrufe von TransformBlock und ActionBlock neu gestaltet werden soll:

<code class="language-csharp">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();</code>

Vorteile dieses Ansatzes

Dieser Ansatz bietet mehrere wichtige Vorteile:

  • wahre asynchrone Parallelität: Es wird asynchrone Operationen in einem parallelen Kontext korrekt behandelt, wodurch vorzeitige Beendigung verhindert wird.
  • Verbesserte Effizienz: Ergebnisse werden verarbeitet, wenn sie verfügbar sind, anstatt auf alle Vorgänge zu warten.
  • Skalierbarkeit und Kontrolle: Die MaxDegreeOfParallelism Eigenschaft ermöglicht die Kontrolle des Niveaus der Parallelität und verhindert die Erschöpfung der Ressourcen. Dies ist entscheidend, wenn es um eine große Anzahl von IDs geht.

Diese Methode stellt sicher, dass asynchrone WCF -Aufrufe gleichzeitig ausgeführt werden, während die richtige Fehlerbehandlung und das Ressourcenmanagement beibehalten wird und eine zuverlässigere und effizientere Lösung bietet.

Das obige ist der detaillierte Inhalt vonWie kann ich Async/Wartee mit parallel.foreach für gleichzeitige WCF -Anrufe sicher verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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