C# Task OutOfMemory异常不终止进程

C# Task OutOfMemory异常不终止进程,c#,exception-handling,task-parallel-library,C#,Exception Handling,Task Parallel Library,我有一个任务的以下代码,它是一个成功的和错误的延续 Task<IEnumerable<IDictionaryObject>> getParameters = _parametersRequester.BeginGetParametersBulk(requestJob); var processParameters = getParameters.ContinueWith((x) => { //Do some processing

我有一个任务的以下代码,它是一个成功的和错误的延续

Task<IEnumerable<IDictionaryObject>> getParameters = _parametersRequester.BeginGetParametersBulk(requestJob);

var processParameters = 
getParameters.ContinueWith((x) =>
    {
         //Do some processing
    }, TaskContinuationOptions.OnlyOnRanToCompletion);

getParameters.ContinueWith((x) =>
    { 
        AggregateException ex = x.Exception;
        ex.Flatten().Handle(ie => HandleException(requestJob, canRetry, ie));
    }, TaskContinuationOptions.OnlyOnFaulted);

return processParameters;
如果已知发生的异常,HandleException将重试某些操作;如果遇到未知异常,HandleException将返回false。 我看到的问题是getParameters抛出OutOfMemoryException,当GC终结器运行时,它应该终止进程,但它们似乎没有运行,因此进程仍然在运行并且处于不稳定状态

如果HandleException返回false,有没有办法强制进程终止?

未由Handle处理的异常将重新打包到新的AggregateException中并重新启动

在.NET4.5中,默认行为是未观察到的任务异常不会停止进程

要更改此设置并恢复.NET 4.0行为,请将以下内容添加到应用程序配置中:

有关更多信息,请参阅

您最好观察异常情况,如果无法正常关闭,至少通过应用程序日志或类似的方式报告异常情况:

System.Environment.Failfast("Meaningful error message.", exception);
句柄未处理的异常将重新打包到新的AggregateException中,然后重试

在.NET4.5中,默认行为是未观察到的任务异常不会停止进程

要更改此设置并恢复.NET 4.0行为,请将以下内容添加到应用程序配置中:

有关更多信息,请参阅

您最好观察异常情况,如果无法正常关闭,至少通过应用程序日志或类似的方式报告异常情况:

System.Environment.Failfast("Meaningful error message.", exception);

谢谢你的回答,詹姆斯。虽然这是4.0,但奇怪的是它为什么不关闭进程。我读了一些关于GC的文章,在这之前,我已经在那个任务上运行了finalizer,这在我的例子中也是没有的。你们安装了.NET4.5吗?如果是这样的话,这就是你所需要的一切。。。这是一个就地升级,也会影响为.NET 4.0编译的应用程序。。。我知道!很糟糕,对吧?不,盒子上安装了4.5号。谢谢你的回答,詹姆斯。虽然这是4.0,但奇怪的是它为什么不关闭进程。我读了一些关于GC的文章,在这之前,我已经在那个任务上运行了finalizer,这在我的例子中也是没有的。你们安装了.NET4.5吗?如果是这样的话,这就是你所需要的一切。。。这是一个就地升级,也会影响为.NET 4.0编译的应用程序。。。我知道!很糟糕吧?不是那个盒子上安装的4.5号。