通常對於服務,您要完成的任務重複進行,可能是循環或可能是觸發器或其他。Topshelf - 處理循環
我使用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
運行在工作中考慮到,然後也許使用Quartz重複任務,然後將其刪除,也許收盤StopService()線程。
想法?
經過這麼多年,任何人都知道Topshelf的確是這樣嗎?在Topshelf文檔中沒有提示,我正在努力決定是否應該在我的服務中系統地產生一個新線程或類似的WhenStarted()。 – guillaume31 2016-09-12 14:22:07