【发布时间】:2015-05-02 15:03:17
【问题描述】:
我有一个 Windows 服务,它在单独的线程上生成一组子活动,并且只有在所有这些活动都成功完成后才会终止。我事先不知道在收到停止信号后终止活动可能需要多长时间。在 OnStop() 期间,我会间隔等待该停止信号,并一直请求额外的时间,只要系统愿意授予它。
这是基本结构:
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 调用的时间点。如果是这种情况,增加开销可能会导致系统最终拒绝该请求,因为它在未来太远了。但是,如果我不增加任何开销,那么我的服务可能会在它有机会请求下一个额外时间块之前终止。
【问题讨论】:
标签: c# windows-services