【发布时间】:2020-03-06 05:24:23
【问题描述】:
我使用 Visual Studio 2015 在 .NET 4 和 C# 中实现了一个 Windows 服务。在 OnStart 方法中,我的服务创建了一个循环的“工作线程”,阻塞了 AutoResetEvent(连接到 @987654323 @)。 “工作线程”也有一个CancellationTokenSource,它手动轮询以检查它是否应该停止工作。 OnStop 方法首先使用 CancellationTokenSource 取消,然后使用 AutoResetEvent 发出信号,唤醒通知“取消”发生的 Worker 线程,然后退出。
此 Windows 服务在 Win7 上运行良好。我已经在 Win10 上安装了几次,它运行良好 - 直到昨天我看到一个日志文件,它说工作线程按预期阻止了 AutoResetEvent,但是:那个工作线程从未到达我的下一条语句程序。它从未醒来,没有执行另一条语句。阻塞94秒后,服务结束。
请注意,在这种情况下,我的 OnStop 方法未被调用。
整个进程没有被杀死 - 有一个线程 (threadID 1) 可能来自 SCM 或操作系统,并且在我的服务终止之前一直阻塞 - 那个 线程记录了一个出去的时候有几条消息。
这是我的问题:Windows 服务控制管理器 (SCM) 是否认为有必要实际终止应用程序线程?谁能解释为什么我的线程死了?
【问题讨论】:
标签: windows-10 windows-services