Tho*_*fel 5 c# windows windows-services service-control-manager
我有一个Windows服务,将文件导入数据库.当服务收到停止通知时,它应该尽可能完成当前导入.可能需要几分钟才能完成.
因此,我使用该ServiceBase.RequestAdditionalTime方法向SCM发出服务仍在工作且可操作的信号.
protected override void OnStop()
{
var waitTime = TimeSpan.FromSeconds(5);
var additionalWaitTime = TimeSpan.FromMinutes(3);
Trace.Write("Stopping service...");
var task = Task.Factory.StartNew(() => worker.Stop());
while (!task.Wait(waitTime))
{
Trace.Write("Requesting additional time...");
RequestAdditionalTime((int)additionalWaitTime.TotalMilliseconds);
Trace.Write("Waiting for {1} to complete...");
}
Trace.Write("Service stopped.");
}
Run Code Online (Sandbox Code Playgroud)
在测试时,我找不到使用该RequestAdditionalTime方法的服务的任何不同行为.如果我删除了RequestAdditionalTime呼叫,则服务的行为方式相同:
Stopping到我的工作人员完成为止.WaitToKillServiceTimeout)有什么影响RequestAdditionalTime?我应该在哪里看到使用它时的差异,我该如何测试呢?有几次我读到,如果没有请求额外的时间,SCM将终止服务.但我看不出那种行为.
所有在我的本地开发机器(Win 8.1)上运行的测试,假设其行为与Windows Server OS上的行为相同.