Joh*_*ohn 7 .net c# windows-services shutdown long-running-processes
我们有一个.NET Windows服务,以事务方式从A到B挖掘大量高度关键数据.我们还需要确保服务中使用的所有外部组件都未正确分配,并在关闭服务本身之前清除所有内容.这可能需要几个小时!原因是服务需要等待外部组件的回调,该回调在2,3或4小时后到达.
- Windows可以等待这么长时间才能使服务正常关闭吗?
- 在服务中有哪些选项我可以指示当操作系统关闭服务时会发生什么,例如完全阻止关闭?
- 另外,作为另一种情况,如果服务器需要重启会发生什么?可以等几个小时的服务吗?
- 操作系统在杀死服务之前等待服务的时间有多长?
您可以在计算机关闭并充分响应时通知CanStop,CanShutdown,CanHandlePowerEvent.
使用ServiceBase.RequestAdditionalTime方法请求额外的时间来终止您的线程:
protected override void OnShutdown()
{
base.RequestAdditionalTime(MaxTimeout);
serviceCore.OnShutdown();
Stop();
}
Run Code Online (Sandbox Code Playgroud)
如果OnShutdown()阻塞时间超过20秒(默认值存储在注册表HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\WaitToKillServiceTimeout中),您的服务将被标记为无响应并被终止.
| 归档时间: |
|
| 查看次数: |
4328 次 |
| 最近记录: |