Heim > Backend-Entwicklung > C++ > Wie kann ich mehrere asynchrone WCF -Anrufe gleichzeitig in C#durchführen?

Wie kann ich mehrere asynchrone WCF -Anrufe gleichzeitig in C#durchführen?

DDD
Freigeben: 2025-02-01 02:56:11
Original
855 Leute haben es durchsucht

How Can I Perform Multiple Asynchronous WCF Calls Concurrently in C#?

Effizient umgehen mehrere asynchrone WCF -Aufrufe mit TPL -Datenflow

Bei der Behandlung mehrerer asynchroner WCF -Anrufe in C#ist Parallel.ForEach nicht ideal, da es nicht direkt await unterstützt. Eine robustere Lösung besteht darin, den Datenfluss der Aufgabe parallel Bibliothek (TPL DataFlow) zu nutzen, der sich bei der Verwaltung asynchroner Vorgänge auszeichnet.

Dieses Beispiel zeigt, wie der Code mit TPL DataFlow für gleichzeitige asynchrone WCF -Aufrufe umgeschrieben wird:

// Create a TransformBlock to asynchronously fetch Customer data.
var getCustomerBlock = new TransformBlock<string, Customer>(
    async id =>
    {
        ICustomerRepo repo = new CustomerRepo();
        return await repo.GetCustomer(id);
    }, new ExecutionDataflowBlockOptions
    {
        MaxDegreeOfParallelism = DataflowBlockOptions.Unbounded // Adjust as needed
    });

// Create an ActionBlock to process each retrieved Customer.
var writeCustomerBlock = new ActionBlock<Customer>(c => Console.WriteLine(c.ID));

// Link the blocks; PropagateCompletion ensures the pipeline finishes.
getCustomerBlock.LinkTo(writeCustomerBlock, new DataflowLinkOptions { PropagateCompletion = true });

// Post IDs to the TransformBlock.
foreach (var id in ids)
{
    getCustomerBlock.Post(id);
}

// Signal completion and wait for all processing to finish.
getCustomerBlock.Complete();
writeCustomerBlock.Completion.Wait();
Nach dem Login kopieren

Schlüsselverbesserungen:

  • Asynchronische Verarbeitung: tPL DataFlow behandelt von Natur aus asynchron await TransformBlock kontrollierte Parallelität:
  • Ermöglicht Ihnen, das Niveau der Parallelität zu steuern, wodurch die Erschöpfung der Ressourcen mit großen Datensätzen verhindert wird. ermöglicht eine maximale Parallelität, setzen Sie jedoch in Betracht, ein Grenzwert für ein besseres Ressourcenmanagement in Produktionsumgebungen zu setzen. MaxDegreeOfParallelism DataflowBlockOptions.Unbounded Verbesserte Struktur:
  • Der Code ist modularer und lesbarer, wobei das Abrufen von Daten und die Verarbeitung in unterschiedliche Blöcke trennen.
  • Streaming -Ausgabe:
  • Ergebnisse werden in der Konsole verarbeitet und geschrieben, wenn sie verfügbar sind, anstatt auf alle Vorgänge zu warten.
  • Fehlerbehandlung:
  • (nicht gezeigt, aber leicht hinzugefügt) TPL -Datenflow liefert Mechanismen für den Umgang mit Ausnahmen, die während asynchroner Operationen auftreten können.
  • Dieser Ansatz bietet eine effizientere und überschaubare Möglichkeit, zahlreiche gleichzeitige asynchrone WCF -Aufrufe im Vergleich zur Verwendung
  • mit verschachtelten
-Anrufen zu behandeln. Denken Sie daran,

basierend auf den Ressourcen Ihres Systems und der Größe Ihrer Parallel.ForEach -Kollektion anzupassen. await

Das obige ist der detaillierte Inhalt vonWie kann ich mehrere asynchrone WCF -Anrufe gleichzeitig in C#durchführen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage