通常对于服务,您想要完成的任务会重复,可能是循环,也可能是触发器或其他东西。
我正在使用Topshelf为我完成重复的任务,特别是我正在使用 Shelf'ing 功能。
我遇到的问题是如何处理任务的循环。
在 Topshelf 中引导服务时,您向它传递一个类(在本例中ScheduleQueueService
)并指出哪个是它的Start
方法和它的Stop
方法:
例子:
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());
}
}
但是在我的StartService()
方法中,我使用 while 循环来重复我正在运行的任务,但是当我尝试通过 Windows 服务停止服务时,它无法停止,我怀疑它是因为该StartService()
方法在最初被调用时从未结束。
例子:
public class ScheduledQueueService
{
bool QueueRunning;
public ScheduledQueueService()
{
QueueRunning = false;
}
public void StartService()
{
QueueRunning = true;
while(QueueRunning){
//do some work
}
}
public void StopService()
{
QueueRunning = false;
}
}
这样做的更好方法是什么?
我考虑过使用 .NET
System.Threading.Tasks
来运行工作,然后可能在 StopService() 上关闭线程也许使用Quartz重复任务然后将其删除。
想法?