SignalR异常杀死服务/ app - System.Threading.Tasks.TaskExceptionHolder.Finalize()

时间:2016-10-17 06:06:36

标签: c# task-parallel-library signalr.client finalizer aggregateexception

我有时候一直在与这个问题作斗争。针对.NET 4.0的Windows服务创建了一个.NET signalr客户端,但由于任务中抛出的聚合异常,有时因System.Threading.Tasks.TaskExceptionHolder.Finalize()而被杀死。这是设置的要点 - 其他细节被省略。

Windows服务:

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

SingalrEnv课程:

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
   }
}

但是,当Signalr在信号器客户端框架内抛出异常(如OnError-System.TimeoutException或任何网络异常)时,Windows服务最终会被杀死。我甚至试过处理Taskscheduler.UnObservedTaskException但没有用。所以似乎异常被抛入另一个线程并且不在那里处理。通过我的设置,我应该捕获异常并观察 - 防止崩溃。在处理TPL和signalr中的异常时我缺少什么?

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

0 个答案:

没有答案