Pracuję nad projektem z poniższym workflow:Odczekaj Collection (kolejki) blokowanie, aby zmniejszyć rozmiary w C#
Część pierwsza:
- zdarzenia przybywa asynchronicznie i jest w kolejce w blokowaniu kolejka, zadzwonimy że Q1
- Temat podnosi następna dostępna pozycja z tej kolejki
- przedmiot kończy się działa {N} liczbę zadań równolegle
- Każde zadanie kolejkuje wynik w drugiej kolejce, nazwijmy to: Q2.
- Po zakończeniu przetwarzania elementu następny element jest odczytywany z kolejki.
Część druga:
- inny wątek czyta off Q2 jeden przedmiot na raz i działa na wynik
Więc problem tutaj jest każdy przedmiot w pierwszej kolejce kończy się równoległa duża liczba zadań, a każde zadanie kolejkuje swój wynik. Druga kolejka musi być przetwarzana seryjnie, po jednym elemencie, i robi się zalewana.
Moje pytanie
muszę mechanizm, który pozwoli na przetwarzanie wątek Q1 czekać aż liczba elementów w Q2 jest poniżej progu określonego. Jaki jest najlepszy sposób, aby to osiągnąć? Czy istnieje sposób na rozwiązanie oparte na zdarzeniach, a nie na rozwiązaniu odpytywania?
Cool; Używam już blokujących kolekcji, więc to drobna zmiana :) –
Wypróbuję to i zaakceptuję, jeśli zadziała. Może to być dobra poprawka, ponieważ zatrzymałoby przetwarzanie moich wątków {N}, dopóki nie mogliby umieścić w kolejce wyników, co zatrzymałoby więcej zdarzeń od przetworzenia w pierwszej kolejności :) –