tpl dataflow와 함께 여러 비동기 WCF 호출을 효율적으로 처리합니다
를 직접 지원하지 않기 때문에 이상적이지 않습니다. 보다 강력한 솔루션은 비동기 작업 관리에 탁월한 작업 병렬 라이브러리의 데이터 플로우 (TPL Dataflow)를 활용하는 것입니다. 이 예제는 동시 비동기 WCF 호출을 위해 tpl dataflow를 사용하여 코드를 다시 작성하는 방법을 보여줍니다. 주요 개선 사항 :
비동기 처리 : tpl dataflow는 본질적으로 . 내의 비동기 작업 ()을 처리합니다.
Parallel.ForEach
제어 된 병렬 처리 : await
개선 된 구조 : 코드는 모듈 식이고 읽기 쉬워 데이터 검색을 분리하고 고유 한 블록으로 처리합니다. 스트리밍 출력 : 결과는 모든 작업이 완료되기를 기다리는 대신 사용 가능한 콘솔에 처리되고 작성됩니다. 오류 처리 :
(표시되지 않지만 쉽게 추가) TPL DataFlow는 비동기 작업 중에 발생할 수있는 예외를 처리하기위한 메커니즘을 제공합니다.<code class="language-csharp">// 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();</code>
컬렉션의 크기에 따라 를 조정하십시오.
위 내용은 C#에서 동시에 여러 비동기 WCF 통화를 수행하려면 어떻게해야합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!