Czy równoległa ForEach jest asynchroniczna?
Czy równoległa ForEach jest asynchroniczna?

Wideo: Czy równoległa ForEach jest asynchroniczna?

Wideo: Czy równoległa ForEach jest asynchroniczna?
Wideo: Parallel.ForEachAsync - Concurrent Tasks with a Limit - New from .NET 6 - Concurrency in C# 2024, Może
Anonim

Cały pomysł za Równoległy . Dla każdego () oznacza, że masz zestaw wątków, a każdy wątek przetwarza część kolekcji. Jak zauważyłeś, to nie działa asynchroniczny - czekaj, gdzie chcesz zwolnić wątek na czas trwania asynchroniczny połączenie. Dla każdego (), który obsługuje asynchroniczny Zadanie dobrze.

W związku z tym, jak czekać na zakończenie równoległego foreach?

Nie musisz robić nic specjalnego, Równoległy . Dla każdego () Wola czekać aż wszystkie jego rozgałęzione zadania zostaną kompletny . Z wątku wywołującego można traktować go jako pojedynczą instrukcję synchroniczną i na przykład zawinąć w try/catch. Nie potrzebujesz tego z Równoległy.

Podobnie, czy foreach jest asynchroniczny? Nie jest asynchroniczny . To blokuje. Ci, którzy po raz pierwszy nauczyli się języka takiego jak Java, C lub Python, zanim spróbują JS, będą zdezorientowani, gdy spróbują umieścić dowolne opóźnienie lub wywołanie API w ciele pętli.

Poza tym, jak kontynuować równolegle foreach?

Po przekonwertowaniu pętli na zgodną definicję dla Równoległy . Dla każdego logiki, skończyło się na tym, że treść instrukcji była lambdą. Cóż, to jest akcja, która zostaje wywołana przez Równoległy funkcjonować. Więc wymień kontyntynuj z return i zerwij z instrukcjami Stop() lub Break().

Czy zadanie WhenAll jest równoległe?

Zastosowanie Gdy wszystko zwraca jeden zadanie to nie jest kompletne aż do każdego zadanie w kolekcji jest zakończona. ten zadania wydaje się biegać w równoległy , ale nie są tworzone żadne dodatkowe wątki. ten zadania można wykonać w dowolnej kolejności.

Zalecana: