Uświadomiłem sobie, że gdy próbuję przetwarzać elementy w równoległej kolejce przy użyciu wielu wątków, podczas gdy wiele wątków może w nich umieszczać elementy, idealnym rozwiązaniem byłoby użycie rozszerzeń reaktywnych z równoległymi strukturami danych.Jak używać IObservable/IObserver z ConcurrentQueue lub ConcurrentStack
Moje oryginalne pytanie jest:
While using ConcurrentQueue, trying to dequeue while looping through in parallel
Więc jestem ciekawy czy jest jakiś sposób, aby mieć LINQ (lub PLINQ) kwerendę, która będzie stale dequeueing jako przedmioty są wprowadzane do niego.
Próbuję uruchomić to w taki sposób, że mogę mieć liczbę producentów pchających do kolejki i ograniczoną liczbę wątków do przetworzenia, więc nie przeładowuję bazy danych.
Gdybym mógł użyć Rx framework, to spodziewam się, że mógłbym go uruchomić, a jeśli 100 elementów zostanie umieszczonych w ciągu 100ms, wtedy 20 wątków, które są częścią zapytania PLINQ, przetworzyłoby właśnie kolejkę.
Istnieją trzy technologie Staram się współpracować:
- Rx Framework (Reactive LINQ)
- Pling
- System.Collections.Concurrent struktur
Czy możesz opracować sposób, w jaki oczekiwałeś, że Rx Ci tu pomoże? –
@Richard Szalay - Jak już wspomniałem pod koniec, myślę, że nie muszę sondować, aby zobaczyć, czy coś jest w kolejce, mógłbym zareagować, gdy coś się tam znajdzie, więc jeśli duża liczba przedmiotów nagle się popychałem, mogłem przetworzyć kilka wątków. Próbuję unikać głosowania, co właśnie teraz robię. –