Generalmente con i servizi, l'attività che si desidera completare viene ripetuta, forse in un ciclo o forse un trigger o forse qualcos'altro.Topshelf - handling loops
Sto utilizzando Topshelf per completare un'attività ripetuta per me, in particolare sto utilizzando la funzionalità Shelf'ing.
Il problema che sto avendo è come gestire il loop dell'attività.
Quando avvio reggette il servizio in TopShelf, si passa una classe (in questo caso ScheduleQueueService
) e indicare che è il suo metodo Start
ed è Stop
metodo:
Esempio:
public class QueueBootstrapper : Bootstrapper<ScheduledQueueService>
{
public void InitializeHostedService(IServiceConfigurator<ScheduledQueueService> cfg)
{
cfg.HowToBuildService(n => new ScheduledQueueService());
cfg.SetServiceName("ScheduledQueueHandler");
cfg.WhenStarted(s => s.StartService());
cfg.WhenStopped(s => s.StopService());
}
}
Ma in il mio metodo StartService()
Sto usando un ciclo while per ripetere l'attività che sto eseguendo, ma quando tento di interrompere il servizio tramite i servizi Windows non si ferma e sospetto che sia perché il metodo StartService()
non è mai terminato quando è stato chiamato originariamente.
Esempio:
public class ScheduledQueueService
{
bool QueueRunning;
public ScheduledQueueService()
{
QueueRunning = false;
}
public void StartService()
{
QueueRunning = true;
while(QueueRunning){
//do some work
}
}
public void StopService()
{
QueueRunning = false;
}
}
ciò che è un modo migliore di fare questo?
Ho considerato utilizzando .NET
System.Threading.Tasks
per eseguire il lavoro e poi forse la chiusura del thread su StopService()Forse usando Quartz di ripetere l'operazione e poi rimuoverlo.
Pensieri?
Dopo tutti questi anni, qualcuno sa se è davvero anche il caso di Topshelf? Non c'è traccia di ciò nella documentazione di Topshelf e sto faticando a decidere se dovrei generare in modo sistematico un nuovo thread o qualcosa di simile su WhenStarted() nel mio servizio. – guillaume31