Heim >Backend-Entwicklung >C++ >Wie kann ich Async/Wartee mit parallel.foreach für gleichzeitige WCF -Anrufe sicher verwenden?
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 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.
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>
Dieser Ansatz bietet mehrere wichtige Vorteile:
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!