Ar lygiagrečiai „ForEach“yra asinchronizuojami?
Ar lygiagrečiai „ForEach“yra asinchronizuojami?

Video: Ar lygiagrečiai „ForEach“yra asinchronizuojami?

Video: Ar lygiagrečiai „ForEach“yra asinchronizuojami?
Video: Is Parallel.For/ForEach in C# actually worth it? (and how to modernize it) 2024, Lapkritis
Anonim

Visa idėja už nugaros Lygiagretus . Kiekvienam () reiškia, kad turite gijų rinkinį ir kiekviena gija apdoroja dalį kolekcijos. Kaip pastebėjote, tai neveikia async - laukti, kur norite išleisti giją visam laikui async skambinti. Kiekvienam (), kuris palaiko asinchroninis Užduotis gerai.

Kalbant apie tai, kaip laukti, kol paralelinis foreach bus baigtas?

Jums nereikia daryti nieko ypatingo, Lygiagretus . Kiekvienam () valia laukti kol bus visos jos šakotos užduotys užbaigti . Iš iškviečiančios gijos galite ją traktuoti kaip vieną sinchroninį teiginį ir, pavyzdžiui, įterpti į try/catch. Jums to nereikia Lygiagretus.

Panašiai, ar foreach yra asinchroninis? Tai nėra asinchroninis . Tai blokuoja. Tie, kurie pirmą kartą išmoko tokią kalbą kaip „Java“, „C“ar „Python“, prieš išbandydami JS, susipainios, kai bandys į savo kilpos turinį įtraukti savavališką delsą arba API iškvietimą.

Be to, kaip tęsti paralelinį foreach?

Kai konvertavote kilpą į suderinamą apibrėžimą Lygiagretus . Kiekvienam logika, jūs galiausiai padarėte teiginį kaip lambda. Na, tai veiksmas, kurį vadina Lygiagretus funkcija. Taigi, pakeiskite Tęsti su return ir pertrauka su Stop() arba Break() sakiniais.

Ar užduotis WhenAll yra lygiagreti?

Taikymas KadaVisi grąžina singlą užduotis kad nebaigta iki kiekvieno užduotis kolekcijoje baigta. The užduotys atrodo, kad įbėga lygiagrečiai , bet papildomų gijų nesukuriama. The užduotys gali užpildyti bet kokia tvarka.

Rekomenduojamas: