gpt4 book ai didi

c# - 在 dotnetcoreapp2.0 中使用 UnobservedTaskException 处理程序

转载 作者:行者123 更新时间:2023-12-05 02:14:12 27 4
gpt4 key购买 nike

以下代码在 netcoreapp2.0 应用程序中运行时,似乎并没有最终抛出 UnobservedTaskException

using System;
using System.Threading;
using System.Threading.Tasks;

namespace ConsoleApp3 {

class Program {

public static void Main(string[] args) {

TaskScheduler.UnobservedTaskException += (s, e) => {
/// Try to crash the application - we wanna nail unobserved exceptions dead.
/// Unfortunately, this code never seems to run.
Console.WriteLine("UnobservedTaskException thrown.");
throw e.Exception;
};

var t = Task.Run(() => {
throw new NotImplementedException();
});

while (!t.IsFaulted)
Thread.Sleep(1);

t = null;
Console.WriteLine("Task is faulted.");

GC.Collect();
GC.WaitForPendingFinalizers();
Console.ReadKey();
}

}
}

这是项目文件。我怎样才能触发 UnobservedTaskException 处理程序?

<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp2.2</TargetFramework>
<LangVersion>7.3</LangVersion>
</PropertyGroup>

</Project>

在其他 stackoverflow 帖子中,我看到了在项目文件中使用以下代码片段的建议,但它仅适用于 .net Framework 4.0+ 项目。如果 .netcore 项目文件有等效项,那可能就是我需要知道的。

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

最佳答案

我遇到了同样的问题。只需尝试在 RELEASE 模式下运行即可。我对其进行了测试,它可以与控制台应用程序 .net 核心版本 2.2 一起使用。

internal class Program
{
private static void Main(string[] args)
{
// REMEMBER TO RUN IN RELEASE MODE

var handler = new EventHandler<UnobservedTaskExceptionEventArgs>(Unobserved);
TaskScheduler.UnobservedTaskException += handler;

Task.Run(() => { Console.WriteLine("task 1"); throw new Exception("TASK 1 EXCEPTION"); });
Task.Run(() => { Console.WriteLine("task 2"); throw new Exception("TASK 2 EXCEPTION"); });

Thread.Sleep(1000);

GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();

Thread.Sleep(1000);

Console.ReadKey();
}

private static void Unobserved(object o, UnobservedTaskExceptionEventArgs e)
{
e.SetObserved(); // optional
foreach (var ex in e.Exception.InnerExceptions)
{
Console.WriteLine(ex.Message);
}
}
}

关于c# - 在 dotnetcoreapp2.0 中使用 UnobservedTaskException 处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53891944/

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