我正在阅读以下文章
ThrowUnobservedTaskExceptions
检查的行为
抛出未观察到的任务异常
设置从应用程序抛出任务中未观察到的异常的时间。
我能够在控制台应用程序中使用以下设置模拟应用程序/进程崩溃:
<ThrowUnobservedTaskExceptions enabled="true"/>
以下是控制台应用程序代码:
程序.cs:
using System;
using System.Threading;
using System.Collections.Generic;
using System.Threading.Tasks;
//Use the following config settings to enable the throwing of unobserved exceptions.
// <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
// <ThrowUnobservedTaskExceptions enabled="true"/>
public class Example
{
static void Main()
{
Task.Run(() => { throw new InvalidOperationException("test"); });
while (true)
{
Thread.Sleep(100);
GC.Collect();
GC.WaitForPendingFinalizers();
}
}
}
App.config:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8" />
</startup>
<runtime>
<ThrowUnobservedTaskExceptions enabled="true"/>
</runtime>
</configuration>
在运行上面的代码时,我可以看到正确的行为
抛出未观察到的任务异常
为true,即针对未观察到的任务异常终止进程。在运行与文档匹配的应用程序后,我能够获得以下屏幕。
我面临的问题是模拟ASP中的确切行为。NET应用程序。我有一个ASP。NET应用程序运行targetFramework=“4.8”。我无法在我的ASP中模拟相同的行为。NET应用程序,即进程/应用程序应在面临未观察到的任务异常时终止
<ThrowUnobservedTaskExceptions enabled="true"/>
背景
以下是应用程序控制器中的简单API代码:
[Route("api/ping"), HttpGet]
public IHttpActionResult TestPing()
{
Task.Run(() => { throw new InvalidOperationException("test"); });
while (true)
{
Thread.Sleep(100);
GC.Collect();
GC.WaitForPendingFinalizers();
}
return Ok("Pong");
}
这是确认我正在使用的屏幕截图
<ThrowUnobservedTaskExceptions enabled=“true”/>
在该应用程序的web配置中设置:
当我在浏览器中运行上述端点时:https://localhost:44364/api/ping我再也看不到ASP了。NET进程被终止。
我的ASP没有变化。NET应用程序的任务未观察到的异常是否保留
抛出未观察到的任务异常
是真是假。我已经在发布模式下运行代码了。没有附加的处理程序
System.Threading.Tasks.TaskScheduler.UnobservedTaskException
在我的ASP中。NET应用程序启动。我也可以确认
public IHttpActionResult TestPing()
方法通过调用API而受到攻击,证据是https://localhost:44364/api/ping正处于加载状态,因为
while (true)
在那个代码中,但进程没有崩溃。
你能分享一下为什么ASP会出现上述行为吗。NET应用程序不同于的控制台应用程序
抛出未观察到的任务异常
背景
我的目标是模拟ASP的崩溃。NET应用程序上未观察到的任务异常。你能分享一段示例代码来实现我的目标吗?