In de dagelijkse ontwikkeling gebruiken we mogelijk wachtrijen, een opslagstructuur die "first-in, first-out" kan bereiken.
Toepassingsscenario's: logs schrijven, e-mails versturen, enzovoort
Als we het interfacelog van elke gebruiker die onze data opvraagt moeten registreren, hoeven we niet elke keer dat de gebruiker erom vraagt een log te schrijven; we kunnen de loginhoud in de wachtrij leggen en andere threads deze laten uitvoeren, zodat de efficiëntie van de applicatie niet wordt aangetast.
Een ander voordeel is dat het toevoegen van data aan de wachtrij in het geval van gelijktijdigheid, waarbij één enkele thread de gegevens van de wachtrij uitvoert, veel uitzonderingen kan vermijden; als gelijktijdigheid (multi-threaded) toegang tot hetzelfde fysieke bestand uitzonderingen veroorzaakt. (afhankelijk van beschikbaarheid)
Universele wachtrijbenadering:
Dit is een abstracte klasse, en je moet deze abstractieklasse erven en de Execute abstraction-methode implementeren. Omdat ik niet weet welk type data je wilt verwerken, worden hier generieke gegevens gebruikt, dat wil zeggen: Entity is van stringtype, methodparameters van stringtype, en de data die je verwerkt is stringtype.
ConcurrentQueue thread-safe queue zorgt ervoor dat er geen uitzonderingen zijn in een multithreaded omgeving.
ManualResetEvent om het signaal van de thread te regelen,Vroeger controleerden we de wachtrij elke paar seconden of minuten op dataNu voegen we de data toe aan de wachtrij en hoeven we alleen nog maar een signaal door te geven!
Gebruik:
(Einde)
|