ホームページ > バックエンド開発 > C++ > C#で複数の非同期WCFコールを同時に実行するにはどうすればよいですか?

C#で複数の非同期WCFコールを同時に実行するにはどうすればよいですか?

DDD
リリース: 2025-02-01 02:56:11
オリジナル
855 人が閲覧しました

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

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();
ログイン後にコピー
重要な改善:

    非同期処理:
  • TPLデータフローは、本質的に非同期操作()内で非同期操作を処理します。 await制御された並列性:TransformBlock
  • では、並行性のレベルを制御し、大きなデータセットでのリソースの疲労を防ぎます。
  • で最大の並列性を可能にしますが、生産環境でのより良いリソース管理の制限を設定することを検討してください。 改善された構造:MaxDegreeOfParallelismコードはよりモジュールで読み取り可能であり、データの取得と処理を異なるブロックに分離します。 DataflowBlockOptions.Unbounded
  • ストリーミング出力:
  • 結果は、すべての操作が完了するのを待つのではなく、利用可能になるとコンソールに処理され、書き込まれます。 エラー処理:
  • (表示されていませんが、簡単に追加されます)TPLデータフローは、非同期操作中に発生する可能性のある例外を処理するためのメカニズムを提供します。
  • このアプローチは、ネストされた呼び出しで
  • を使用するのと比較して、多数の同時非同期WCFコールを処理するためのより効率的で管理しやすい方法を提供します。 システムのリソースと
  • コレクションのサイズに基づいてを調整することを忘れないでください。

以上がC#で複数の非同期WCFコールを同時に実行するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート