我有一個Windows服務,它在單獨的線程上產生一組子活動,並且只應在所有這些活動都成功完成時終止。我不知道在收到停止信號後終止一個活動需要多長時間。在OnStop()期間,我會等待該停止信號的間隔,並且只要系統願意授予它,就會繼續請求額外的時間。什麼是RequestAdditionalTime()的安全開銷?
這裏的基本結構:
class MyService : ServiceBase
{
private CancellationTokenSource stopAllActivities;
private CountdownEvent runningActivities;
protected override void OnStart(string[] args)
{
// ... start a set of activities that signal runningActivities
// when they stop
// ... initialize runningActivities to the number of activities
}
protected override void OnStop()
{
stopAllActivities.Cancel();
while (!runningActivities.Wait(10000))
{
RequestAdditionalTime(15000); // NOTE: 5000 added for overhead
}
}
}
到底有多少「開銷」我應該在RequestAdditionalTime
呼叫加入?我擔心這些請求是累積的,而不是基於每次撥打RequestAdditionalTime
時的時間點。如果是這種情況,增加開銷可能會導致系統最終拒絕請求,因爲它將來會太遠。但是如果我不添加任何開銷,那麼我的服務可能會在它有機會請求下一塊額外時間之前終止。