Wcześniej napisałem prostą klasę pomocy logowania, skopiowaną z innego frameworka, i test nie jest łatwy w obsłudze, jak następuje:
Ten artykuł ponownie implementuje prostą klasę logowania opartą na BlockingCollection.
BlockingCollection<T> to klasa kolekcji bezpieczna dla wątków, która oferuje następującą funkcjonalność:
Wdroż model maker-user. Dodawanie i pobieranie elementów jednocześnie przez wielowątkowanie. Opcjonalna maksymalna pojemność. Gdy kolekcja jest pusta lub pełna, jest blokowana przez operacje wstawiania i usuwania. Próby wstawiania i usuwania nie blokują ani nie występują przez określony czas. Encapsulation implementuje dowolny typ kolekcji IProducerConsumerCollection<T> Użyj tagu cancel, aby wykonać akcję cancelowania. Obsługiwane są dwa typy enumów wykorzystujących foreach (w Visual Basic, For Each): enumy tylko do odczytu. Enumeracja, która usuwa element po jego wyliczeniu.
Microsoft przedstawia:Logowanie do linku jest widoczne.
BlockingCollection to bezpieczna kolejka blokująca wątków, wykorzystująca tę funkcję do implementacji trybu producer-consumer w procesie, takiej jak przekazywanie wiadomości, logowanie itp.
Używaj metody Add do dodawania informacji do kolejki, a gdy kolejka nie zawiera żadnych komunikatów, IsCompleted zawsze zablokuje pętlę while, więc nie powoduje martwej pętli. Gdy pojawi się nowa wiadomość, wywołane zostanie IsCompleted in while i zwróci typ bool, co powoduje kontynuację wykonywania, czyli pobieranie danych z wątku.
Wcześniej blokowaliśmy wątek, wywołując metodę WaitOne w ManualResetEvent, wywołując metody Reset i Set w celu przekazania sygnału, w następujący sposób:
Test zapisuje 10 000 logów, co zajmuje mniej niż 10 milisekund, jak pokazano na poniższym rysunku:
Kod jest następujący:
Pobranie kodu źródłowego:
Turyści, jeśli chcecie zobaczyć ukrytą zawartość tego wpisu, proszę Odpowiedź
|