C# 信号器异常终止服务/app-System.Threading.Tasks.TaskExceptionHolder.Finalize()
我有时一直在为这个问题争论。以.NET 4.0为目标的windows服务会创建一个.NET signalr客户端,但由于任务中引发聚合异常,有时会在forC# 信号器异常终止服务/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
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中显式启用崩溃行为