2

我在 Windows 服务中有一个任务。这是感兴趣的代码:

private Task Schedule(Action action, int interval, EventDefinition restoreEvent = null) {
    return new Task(() => {
        bool error = false;
        while (IsEnabled && !CTS.Token.IsCancellationRequested) {
            if (!IsPaused) {
                try { // we don't want our service to crash if anything goes wrong on production
                    action();
                    if (error && restoreEvent != null) SysEvent(restoreEvent);
                    error = false;
                }
                catch (Exception x) {
                    error = true;
                    SysEvent(new EventDefinition { Id = x.HResult, Message = x.Message, Type = EventLogEntryType.Error });
                }
            }
            CTS.Token.WaitHandle.WaitOne(interval);
        }
    }, CTS.Token, TaskCreationOptions.LongRunning);
}

如您所见 - 我的服务任务在循环中运行,无限循环,只有当 IsEnabled 设置为 false 时,循环才能结束,这仅设置为 2 点:服务启动和服务停止代码。它也可以在请求取消任务时结束,但这会停止服务。

但是我的服务正在运行!它没有收到任何停止或取消请求。没有例外可以在 while 循环中中断任务。但大约 30 小时后 - 服务只是无缘无故停止工作。它的状态仍在运行。任何系统日志中都没有单一错误或警告!它只是默默地死去。

发生了什么事?有什么线索吗?.NET 任务可以就这样死掉吗?

4

0 回答 0