C# 信号器异常终止服务/app-System.Threading.Tasks.TaskExceptionHolder.Finalize()

C# 信号器异常终止服务/app-System.Threading.Tasks.TaskExceptionHolder.Finalize(),c#,task-parallel-library,signalr.client,finalizer,aggregateexception,C#,Task Parallel Library,Signalr.client,Finalizer,Aggregateexception,我有时一直在为这个问题争论。以.NET 4.0为目标的windows服务会创建一个.NET signalr客户端,但由于任务中引发聚合异常,有时会在forSystem.Threading.Tasks.TaskExceptionHolder.Finalize()后被终止。这里是设置的要点-其他细节被省略 Windows服务: onStart() { try { var task1 = new Task(SignalrEnv.WireUp(),TaskCreationOpti

我有时一直在为这个问题争论。以.NET 4.0为目标的windows服务会创建一个.NET signalr客户端,但由于任务中引发聚合异常,有时会在for
System.Threading.Tasks.TaskExceptionHolder.Finalize()后被终止。这里是设置的要点-其他细节被省略

Windows服务:

onStart()
{
   try {
         var task1 = new Task(SignalrEnv.WireUp(),TaskCreationOption.LongRunning);
         task1.Wait();
   }
   catch(Exception ex)
   {
      //log the exception
   }
}
public void WireUp(){
   //create hubconnection
   //Create hubproxy

   try 
   {
         var task = Hubconnection.Start();
         task.Wait();
   }
   catch(AggregateException agex)
   {
       //observe the inner exceptions so the service won't crash
   }
   catch(Exception ex)
   {
       //Log the exception
   }
}
信号环境类:

onStart()
{
   try {
         var task1 = new Task(SignalrEnv.WireUp(),TaskCreationOption.LongRunning);
         task1.Wait();
   }
   catch(Exception ex)
   {
      //log the exception
   }
}
public void WireUp(){
   //create hubconnection
   //Create hubproxy

   try 
   {
         var task = Hubconnection.Start();
         task.Wait();
   }
   catch(AggregateException agex)
   {
       //observe the inner exceptions so the service won't crash
   }
   catch(Exception ex)
   {
       //Log the exception
   }
}
但是,当Signal在Signal客户端框架内抛出异常(如
OnError System.TimeoutException
或任何网络异常)时,windows服务最终会被终止。我甚至尝试过处理
任务调度程序。未观察到的taskeexception
,但没有效果。因此,异常似乎是在另一个线程中抛出的,没有在那里处理。在我的设置中,我应该捕获异常并观察-防止崩溃。我在处理TPL和Signal中的异常时遗漏了什么

注意:在使用.net 4.5的系统上,该服务没有问题-没有崩溃-因为Microsoft将其作为默认行为。必须在web.config中显式启用崩溃行为