În dezvoltarea zilnică, putem folosi cozi, care sunt o structură de stocare ce poate realiza "primul intrat, primul ieșit".
Scenarii de aplicație: scrie jurnale, trimite emailuri etc
Dacă trebuie să înregistrăm jurnalul interfeței fiecărui utilizator care solicită datele noastre, nu trebuie să scriem un jurnal de fiecare dată când utilizatorul îl solicită, putem pune conținutul jurnalului în coadă și lăsa alte fire să îl execute, astfel încât să nu afecteze eficiența aplicației.
Un alt avantaj este că adăugarea de date la coadă în cazul concurenței, folosind un singur fir pentru a executa datele cozii, poate evita multe excepții; dacă concurența (multi-threaded), accesul la același fișier fizic va cauza excepții. (sub rezerva disponibilității)
Abordarea universală a cozilor:
Aceasta este o clasă abstractă și trebuie să moștenești această clasă de abstracție și să implementezi metoda Execute abstraction. Pentru că nu știu ce tip de date vrei să procesezi, aici se folosesc generice, adică Entitatea este de tip șir, parametrii metodei sunt de tip șir, iar datele pe care le procesezi sunt de tip șir.
Coada thread-safe ConcurrentQueue asigură că nu vor exista excepții într-un mediu multi-threaded.
ManualResetEvent pentru a controla semnalul firului de execuție,În trecut, verificam coada pentru date la câteva secunde sau minuteAcum, adăugăm datele la coadă și trebuie doar să transmitem un semnal!
Utilizare:
(Sfârșit)
|