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
var bag = new ConcurrentBag<object>(); Parallel.ForEach(myCollection, async item => { // 预处理 var response = await GetData(item); bag.Add(response); // 后处理 }); var count = bag.Count;
count
Kaedah ini berkesan, tetapi ia melumpuhkan kelebihan Parallel.ForEach
dan memerlukan anda melakukan rawatan yang tidak normal. async
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;
Terdapat dua cara untuk mencapai penggunaan await
kata kunci
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!