TPLデータフローを使用して複数の非同期WCF呼び出しを効率的に処理します
C#で複数の非同期WCF呼び出しを扱う場合、Parallel.ForEach
は直接サポートしていないため理想的ではありません。 より堅牢な解決策は、非同期操作の管理に優れているタスクパラレルライブラリのデータフロー(TPLデータフロー)を活用することです。
await
この例は、同時の非同期WCF呼び出しのためにTPLデータフローを使用してコードを書き直す方法を示しています:
// 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();
await
制御された並列性:TransformBlock
MaxDegreeOfParallelism
コードはよりモジュールで読み取り可能であり、データの取得と処理を異なるブロックに分離します。
DataflowBlockOptions.Unbounded
以上がC#で複数の非同期WCFコールを同時に実行するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。