ホームページ > バックエンド開発 > C++ > 「async` lambdas」を適切に使用するには、「parallel.foreach」?

「async` lambdas」を適切に使用するには、「parallel.foreach」?

Patricia Arquette
リリース: 2025-02-01 03:16:08
オリジナル
403 人が閲覧しました

How to Properly Use `async` Lambdas with `Parallel.ForEach`?

非同期lambda平行

を使用します 並列処理コレクションの方法は、ラムダ式を使用して

メソッドを使用することです。ただし、ラムダ式の非同期方法を呼び出したい場合は、いくつかの問題に遭遇します。

Parallel.ForEach問題は、作成されたスレッドがバックグラウンドスレッドのみであり、この方法は完成を待たないことです。これは、次の例で見ることができます:

Parallel.ForEach問題は、の呼び出しがラムダが完了するのを待たないため、が0になることです。 キーワードが削除されている場合、メソッドを以下に示します。

<code class="language-csharp">var bag = new ConcurrentBag<object>();
Parallel.ForEach(myCollection, async item =>
{
    // 预处理
    var response = await GetData(item);
    bag.Add(response);
    // 后处理
});
var count = bag.Count;</code>
ログイン後にコピー
この方法は効果的ですが、

の利点を無効にし、手動の異常な治療を実行する必要があります。 count Parallel.ForEach非同期lambda paradlel.foreachの使用を実現する方法async

キーワードの使用を実現するには、サイクル:
<code class="language-csharp">var bag = new ConcurrentBag<object>();
Parallel.ForEach(myCollection, item =>
{
    // 预处理
    var responseTask = GetData(item); // 注意这里去掉了await
    responseTask.Wait();
    var response = responseTask.Result;
    bag.Add(response);
    // 后处理
});
var count = bag.Count;</code>
ログイン後にコピー
の2つの方法があります。

awaitこの方法は非常に単純で、コードの数行のみが必要です。

2。複雑で並列化この方法はより複雑ですが、並列化のプロセスをよりよく制御できます。詳細については、Stephen ToubのForeachasync記事を確認してください。

以上が「async` lambdas」を適切に使用するには、「parallel.foreach」?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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