C# 两个后台线程中的一个在没有任何通知的情况下随机停止(在日志中)

C# 两个后台线程中的一个在没有任何通知的情况下随机停止(在日志中),c#,windows-services,C#,Windows Services,我有一个Windows服务,其中有两个线程应该不稳定地运行(while(true)),并且都有相同的睡眠时间(这在while()下发生) 当服务启动时,两个线程都会启动并工作一段时间,然后第二个线程停止在日志中留下任何跟踪。异常处理在所有级别都完成 我已经设法解决了这个问题,每个线程有不同的睡眠时间,我认为这不是一个好主意。下面是我初始化线程的方法 protected override void OnStart(string[] args) { Associate = new Threa

我有一个Windows服务,其中有两个线程应该不稳定地运行(while(true)),并且都有相同的睡眠时间(这在while()下发生) 当服务启动时,两个线程都会启动并工作一段时间,然后第二个线程停止在日志中留下任何跟踪。异常处理在所有级别都完成

我已经设法解决了这个问题,每个线程有不同的睡眠时间,我认为这不是一个好主意。下面是我初始化线程的方法

protected override void OnStart(string[] args)
    {
Associate = new Thread(new AssociateProc().Associator) { IsBackground = true, Name = "Associator" };
Associate.Start();
DISAssociate = new Thread(new AssociateProc().DisAssociator) { IsBackground = true, Name = "DISAssociator" };
DISAssociate.Start();
     }
关联和解除关联方法定义为

public void Associator()
{
  while (true)
  {
    try
    {
      //METHODS CALLED
    }
    catch(exception ex)
    {
       //Exception Handling
    }
    thread.sleep()
  }

}
请让我知道更好的实现

在试图找出场景中重复的模式时。。我发现,当将信息记录到一个平面文件时,它会写入多个平面文件,当它开始写入多个文件时,第二个线程就会停止,不会留下任何痕迹


我使用Microsoft.Practices.EnterpriseLibrary.Logging进行日志记录。

看起来死锁已经发生。您在方法中使用过任何同步模式吗?此外,我想,你的线程大部分时间都会生成上下文切换。。。这不是管理线程的有效方法。您的
Thread.Sleep()
似乎根本不会被调用?这是期望的行为吗?拥有一个空的catch块不会使诊断问题变得更容易-如果你的实际代码是这样的话,当然没有记录任何东西-你在任何人注意到错误之前就抑制了错误。@Damien_不信者我提到的只是代码的骨架。。实时我处理并写入异常日志文件