首页 > 解决方案 > Windows 服务:运行通知方法时重新启动线程/任务会引发异常

问题描述

我对 C# 和 Windows 服务还很陌生,但我的第一个服务正在运行以记录来自 tcp 客户端的数据。目前我只是在 OnStart 期间启动 Logging 方法

    protected override void OnStart(string[] args)
         {
            MyDataLogger DataLogger = new MyDataLogger();
            MyDataLogger.StartLogging();
         }
 

StartLogging 包含一些到数据库的连接和 tcp 客户端上的通知定义。到目前为止,它运行良好,但我担心诸如丢失 tcp 连接之类的不良事件。当发生不希望的事件时,我会捕获并将它们记录在错误日志中,但我目前无法正确重新启动服务。一位同事提到为 Logging 过程启动一个单独的线程,并在引发异常时重新启动它。到目前为止,我发现不同的来源讨论了几个部分,例如Windows 服务不断运行和在所需解决方案的 .NET 中重新启动线程(使用 C#)我也喜欢How to have a loop in a Windows service without using the Timer的答案但不知道如何通过 Worker Function 中的通知而不是循环请求来实现它。目前我还有以下问题:

  1. 哪个 Worker 更适合我的目的:线程还是 LongRunning 任务?
  2. 如何在不使用循环 Worker 函数的情况下检查 OnStart 中的 Worker 状态?
  3. 如何处理来自 MyDataLogger 类的异常以更改状态并重新启动 Worker?
  4. 在异常期间处理所有客户端/数据库连接并在重新启动 Worker 时再次调用 StartLogging 是否正确?

提前非常感谢!

标签: c#multithreading.net-4.0windows-servicestask-parallel-library

解决方案


推荐阅读