W codziennym rozwoju możemy używać kolejek, które są strukturą pamięci masowej, umożliwiającą osiągnięcie zasady "pierwszy wszedł, pierwszy wyszedł".
Scenariusze aplikacyjne: zapisywanie logów, wysyłanie maili itd
Jeśli musimy zapisywać logi interfejsu każdego użytkownika żądającego naszych danych, nie musimy zapisywać logu za każdym razem, gdy użytkownik o to prosi, możemy umieścić zawartość logu w kolejce i pozwolić innym wątkom ją wykonać, aby nie wpływać na efektywność aplikacji.
Kolejną zaletą jest to, że dodanie danych do kolejki w przypadku współbieżności, używając pojedynczego wątku do wykonania danych kolejki, może uniknąć wielu wyjątków; jeśli współbieżność (wielowątkowość), dostęp do tego samego fizycznego pliku powoduje wyjątki. (w zależności od dostępności)
Uniwersalne podejście kolejkowe:
To jest klasa abstrakcyjna i musisz ją odziedziczyć oraz zaimplementować metodę abstrakcji Execute (abstrakcyjne). Ponieważ nie wiem, jaki typ danych chcesz przetwarzać, używa się tu generyków, czyli Encja ma typ ciągu znaków, parametry metody to typ ciągu, a dane, które przetwarzasz, to dane typu ciągu znaków.
ConcurrentQueue Thread-safe zapewnia brak wyjątków w środowisku wielowątkowym.
ManualResetEvent do sterowania sygnałem wątku,W przeszłości sprawdzaliśmy kolejkę pod kątem danych co kilka sekund lub minutTeraz dodajemy dane do kolejki i wystarczy przekazać sygnał!
Użycie:
(Koniec)
|