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号。