非同期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>
awaitこの方法は非常に単純で、コードの数行のみが必要です。
2。複雑で並列化この方法はより複雑ですが、並列化のプロセスをよりよく制御できます。詳細については、Stephen ToubのForeachasync記事を確認してください。
以上が「async` lambdas」を適切に使用するには、「parallel.foreach」?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。