我的服务任务没有任何理由死亡

时间:2013-07-24 20:46:49

标签: c# .net service task-parallel-library

我在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任务会像这样死吗?

0 个答案:

没有答案