muszę jednego producenta, zapytania FIFO pojedynczego konsumenta, ponieważczy warto używać BlockingCollection <T> jako pojedynczego producenta, pojedynczego klienta FIFO?
- muszę przetwarzać komunikaty w kolejności ich otrzymania.
- Muszę to zrobić asynchronicznie, ponieważ program wywołujący nie powinien czekać na przetwarzanie wiadomości.
- Kolejne przetwarzanie komunikatów powinno zostać uruchomione tylko po zakończeniu przetwarzania poprzedniego komunikatu. Czasami częstotliwość "odbierania" wiadomości jest wyższa niż częstotliwość "przetwarzania" wiadomości. Ale średnio powinienem być w stanie przetworzyć wszystkie wiadomości, tylko czasami muszę "umieścić w kolejce" ich paczkę.
Więc to całkiem jak TCP/IP, jak sądzę, w którym masz jednego producenta i jednego odbiornika, czasami można odbierać wiadomości szybciej niż można przetworzyć, więc trzeba ich zapytać. Gdzie zamówienie JEST ważne i gdzie dzwoniący absolutnie nie interesuje się tym, co robisz z tymi rzeczami.
Brzmi to dość proste i prawdopodobnie można używać ogólnego Queue
za to, ale chcę używać BlockingCollection
za to, bo nie chcę pisać żadnego kodu z ManualResetEvent
itp
Jak nadaje BlockingCollection
dla mojego zadania i prawdopodobnie możesz zaproponować coś innego?
Mam nadzieję, że domyślna implementacja" BlockingCollection "FIFO nie zostanie zmieniona w niektórych następnych wydaniach , ale to jest kolejne pytanie ... – javapowered
Uważam, że powinieneś być w porządku, o ile odwołujesz się do interfejsu 'IP produkcerConsumerCollection', a implementacja klas BCL może: t zmienić w taki główny sposób, jak zamówienie FIFO na coś innego – sll
Widzę, że metoda Start() czeka na dwa zadania do wykonania. Oczywiście zadanie "producerWorker" zakończy się, ale 'consumerWorker' nigdy się nie skończy. Czy należy to wziąć pod uwagę? –