代码之家  ›  专栏  ›  技术社区  ›  Raghav

在ASP。NET应用程序在任务上出现未观察到的异常

  •  0
  • Raghav  · 技术社区  · 5 年前

    我正在阅读以下文章 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,即针对未观察到的任务异常终止进程。在运行与文档匹配的应用程序后,我能够获得以下屏幕。

    enter image description here

    我面临的问题是模拟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配置中设置:

    enter image description here

    当我在浏览器中运行上述端点时: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应用程序上未观察到的任务异常。你能分享一段示例代码来实现我的目标吗?

    0 回复  |  直到 5 年前