Reikalavimai: Projekte yra apibrėžta statinė žurnalo eilė, ir kiekviena užklausa gali įdėti pranešimus į eilę, ir mums reikia, kad svetainė atidarytų foninę užduotį, kad galėtume apdoroti pranešimus šioje eilėje.
Peržiūra:
IHostedService sąsaja
"IHostedService" sąsaja apibrėžia du nuomojamų objektų metodus:
StartAsync(CancellationToken): logika, naudojama foninėms užduotims paleisti.
StopAsync(CancellationToken): suaktyvinamas, kai pagrindinis kompiuteris atlieka įprastą išjungimą, kuriame yra logika, kaip užbaigti fonines užduotis.
"BackgroundService" bazinė klasė
"BackgroundService" yra bazinė klasė, naudojama ilgai veikiančiai "IHostedService" įdiegti, šaltinio kodo adresas:Hipersaito prisijungimas matomas.
Iškvieskite ExecuteAsync(CancellationToken), kad paleistumėte foninę paslaugą. Įgyvendinimas pateikia užduotį, kuri nurodo visą foninės tarnybos gyvavimo laiką. Jokios kitos paslaugos nepaleidžiamos, kol "ExecuteAsync" netampa asinchroninė, pvz., skambinant laukti. Venkite ilgų blokavimo inicijavimo užduočių "ExecuteAsync". StopAsync(CancellationToken) laukia, kol bus baigtas ExecuteAsync.
Mes įgyvendiname foninę užduotį, kad atspausdintume žurnalą kilpoje, kodas yra toks:
Užsiregistruokite aptarnavimo tarnyboje naudodami šį kodą:
Registracijos režimas yra viengubas, kaip parodyta paveikslėlyje žemiau:
Pradėkite projektą su išvestimi taip:
Aprėpties tarnybos naudojimas foninėje užduotyje
Norėdami naudoti aprėptį "BackgroundService", sukurkite aprėptį. Pagal numatytuosius nustatymus valdomoms tarnyboms nesukuriama jokia aprėptis. Jei naudojate konstruktorių tiesiogiai, kad įterptumėte aprėptį objektą, klaida yra tokia:
Neapdorota išimtis. System.AggregateException: kai kurių tarnybų neįmanoma sukurti (klaida tikrinant paslaugos aprašą "ServiceType: Microsoft.Extensions.Hosting.IHostedService" Trukmė: Singleton ImplementationType: WebApplication2.Worker.TestServiceHostedService': Negalima naudoti aprėpties tarnybos 'WebApplication2.Worker.User' iš singleton ' Microsoft.Extensions.Hosting.IHostedService'.) Turime pakeisti kodą taip:
Nuoroda:Hipersaito prisijungimas matomas.
(Pabaiga)
|