Исключение SignalR убивает службу / приложение - System.Threading.Tasks.TaskExceptionHolder.Finalize()

Я боролся с этой проблемой иногда. Служба Windows, нацеленная на.NET 4.0, создает клиент сигнализатора.NET, но иногда его убивают 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 и сигнализаторе?

Примечание. В системах с.net 4.5 у службы нет проблем - нет сбоев - поскольку Microsoft установила поведение по умолчанию. Можно было бы явно включить поведение сбоя в web.config.

0 ответов

Другие вопросы по тегам