gpt4 book ai didi

c# - 任务 OutOfMemory 异常不会终止进程

转载 作者:行者123 更新时间:2023-11-30 20:52:29 24 4
gpt4 key购买 nike

我有以下任务代码,有成功和失败的延续。

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 如果发生的异常是已知的,则重试一些操作,如果遇到未知的异常,则返回 false。我看到的问题是 getParameters 抛出 OutOfMemoryException,它应该在 GC 终结器运行时终止进程,但它们似乎没有运行,因此进程仍在运行并且处于不稳定状态。

如果 HandleException 返回 false,有什么方法可以强制进程终止?

最佳答案

未被 Handle 处理的异常被重新打包到一个新的 AggregateException 中并重新抛出。

在 .NET 4.5 中,默认行为是未观察到的任务异常不会关闭进程。

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

<configuration> 
<runtime>
<ThrowUnobservedTaskExceptions enabled="true"/>
</runtime>
</configuration>

参见 here了解更多信息。

你可能最好观察异常,如果无法正常关闭,至少用你的应用程序日志或类似的东西报告异常:

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

关于c# - 任务 OutOfMemory 异常不会终止进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20841301/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com