我有一个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
时的时间点。如果是这种情况,增加开销可能会导致系统最终拒绝请求,因为它将来会太远。但是如果我不添加任何开销,那么我的服务可能会在它有机会请求下一块额外时间之前终止。