Rumah > pembangunan bahagian belakang > C++ > Bagaimana cara menggunakan `async` lambdas dengan` paralel.foreach`?

Bagaimana cara menggunakan `async` lambdas dengan` paralel.foreach`?

Patricia Arquette
Lepaskan: 2025-02-01 03:16:08
asal
451 orang telah melayarinya

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

Gunakan lambda asynchronous selari

Kaedah pengumpulan pemprosesan selari adalah menggunakan kaedah

dengan ekspresi lambda. Walau bagaimanapun, jika anda ingin memanggil kaedah tak segerak dalam ekspresi Lambda, anda akan menghadapi beberapa masalah.

Parallel.ForEach Masalahnya ialah benang yang dicipta hanya benang latar belakang, dan kaedah ini tidak akan menunggu siapnya. Anda dapat melihat ini dalam contoh berikut:

Parallel.ForEach Masalahnya ialah akan menjadi 0, kerana panggilan

tidak akan menunggu Lambda selesai. Jika kata kunci dipadam, kaedah ditunjukkan di bawah:
var bag = new ConcurrentBag<object>();
Parallel.ForEach(myCollection, async item =>
{
    // 预处理
    var response = await GetData(item);
    bag.Add(response);
    // 后处理
});
var count = bag.Count;
Salin selepas log masuk

count Kaedah ini berkesan, tetapi ia melumpuhkan kelebihan Parallel.ForEach dan memerlukan anda melakukan rawatan yang tidak normal. async

<实> bagaimana untuk mencapai penggunaan lambda paradlel.foreach
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;
Salin selepas log masuk

Terdapat dua cara untuk mencapai penggunaan await kata kunci

kitaran:

3 Kaedah ini sangat mudah, hanya beberapa baris kod yang diperlukan:

<.> 2. Kompleks dan Parallelization await Parallel.ForEach Kaedah ini lebih rumit, tetapi ia dapat mengawal proses penyesuaian. Untuk maklumat lanjut, sila semak artikel Foreachasync Stephen Toub.

Atas ialah kandungan terperinci Bagaimana cara menggunakan `async` lambdas dengan` paralel.foreach`?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan