ホームページ > バックエンド開発 > C++ > 並行してAsync/async/async/async/asyncを使用するにはどうすればよいですか?

並行してAsync/async/async/async/asyncを使用するにはどうすればよいですか?

Susan Sarandon
リリース: 2025-02-01 03:02:09
オリジナル
815 人が閲覧しました

How Can I Safely Use Async/Await with Parallel.ForEach for Concurrent WCF Calls?

ASYNC/WAITおよびTPL DATAFLOW

を使用して、同時のWCF呼び出しを処理します この記事では、.NETアプリケーション内で複数の非同期WCF呼び出しを安全かつ効率的に実行するという課題に対処しています。

内のネストの素朴なアプローチは、しばしば早期終了と不完全な操作につながります。

ソリューション:TPL Dataflow await Parallel.ForEach推奨されるソリューションは、タスクパラレルライブラリ(TPL)データフローフレームワークを活用します。 具体的には、

および

を使用すると、並列非同期操作のための堅牢で制御されたメカニズムが提供されます。

リファクタリングコードの例

TransformBlock次のコードは、同時のwcf呼び出しに対してActionBlockおよび

を使用するために元のコードをリファクタリングする方法を示しています:

このアプローチのメリット

TransformBlockこのアプローチには、いくつかの重要な利点があります:ActionBlock

<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>
ログイン後にコピー

真の非同期並列性:

並列コンテキスト内で非同期操作を正しく処理し、早期終了を防ぎます。

効率の向上:
    結果は、すべての操作が完了するのを待つのではなく、利用可能になるにつれて処理されます。
  • スケーラビリティとコントロール:
  • プロパティは、同時性のレベルを制御し、リソースの使い果たしを防ぎます。 これは、多数のIDを扱う場合に重要です。
  • この方法により、非同期WCFコールが適切なエラー処理とリソース管理を維持しながら、より信頼性の高い効率的なソリューションを提供しながら、同時に実行されることが保証されます。

以上が並行してAsync/async/async/async/asyncを使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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