如何处理 ASP.NET 中未处理的线程异常?

2024-06-25

ASP.NET 应用程序应该如何处理非请求后台线程上发生的未处理的异常(由于错误)?

默认情况下,此类异常会导致进程终止。这在 ASP.NET 工作进程的设置中是不可接受的因为并发运行的请求会不可预测地中止。这也是一个性能问题。

请求线程上的异常不是问题,因为 ASP.NET 会处理它们(通过显示错误页面)。

The AppDomain.UnhandledException事件允许观察异常的发生,但此时无法阻止终止。

这是需要粘贴到 ASPX 页面代码隐藏中的重现。

protected void Page_Load(object sender, EventArgs e)
{
    var thread = new Thread(() =>
        {
            throw new InvalidOperationException("some failure on a helper thread");
        });
    thread.Start();
    thread.Join();
}

我所知道的唯一解决方案是永远不要让异常“逃逸”而未处理。是否还有其他更全面、更彻底的解决方案?


Rx(响应式编程)就是为了解决这样的问题而诞生的,尝试考虑改变你现在使用的框架,换成Rx

http://msdn.microsoft.com/en-us/data/gg577609.aspx http://msdn.microsoft.com/en-us/data/gg577609.aspx

掘金包:

https://nuget.org/packages/Rx-Main/1.0.11226 https://nuget.org/packages/Rx-Main/1.0.11226

这是等效的 Rx 代码:

        var o = Observable.Start(() => { throw new NotImplementedException(); });

        o.Subscribe(
            onNext => { },
            onError => { },
            () => { Console.WriteLine("Operation done"); });

正如您所看到的,当您指定一个时,错误不会转义后台线程错误处理程序, onError => { }

如果不指定错误处理程序,异常将被传播:

        o.Subscribe(
            onNext => { },
            () => { Console.WriteLine("Operation done"); });

在上面的示例中,异常将被传播并会导致与您发布的代码相同的问题

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何处理 ASP.NET 中未处理的线程异常? 的相关文章

  • 使用具有 ThreadStatic 属性的并行扩展。会不会泄漏内存?

    我相当频繁地使用并行扩展 而且我刚刚遇到了一种情况 使用线程本地存储可能是明智的 允许工作线程重用对象 因此 我正在查看 ThreadStatic 属性 该属性将静态字段 变量标记为每个线程具有唯一值 在我看来 在没有任何 PE 线程重用保
  • Web API 帮助页面显示每个方法的两个版本

    如何避免帮助页面显示我的方法的两个版本 正如你所看到的 我已经设置了一条自定义路线 api property search finnId 但我不希望使用查询参数的那个出现在 帮助 页面中 有办法解决这个问题吗 我正在使用 ASP NET F
  • 是否可以通过 Windows 服务中的自托管 Web API 提供网页?

    我有一个完全正常的 TopShelf 托管 Windows 服务 我需要一个简单的服务接口 它将返回一些当前的统计信息 保存在内存中 我有一个狡猾的计划 要在服务中自托管一个网站 并且我发现 asp net API 具有自托管功能 是否有可
  • .NET DateTime 到 time_t(以秒为单位)

    有C代码 time1 double dt1 25569 0 86400 0 它以秒为单位从 TDateTime VCL 转换为 time t 格式 所以最后我需要得到time t NET DateTime 的格式 关于 time t 几乎普
  • IoC比较[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 开发 ASP NET Web 应用程
  • ASP.NET 自定义角色管理

    ASP NET中有角色管理功能 它适用于本地开发机器 对于我们的项目 我们需要客户管理员能够创建新用户并管理他们的角色 所以 基本上与 aspnet regsql exe 的作用相同 问题是 我们应该开发自己的页面和表单还是使用一些现成的工
  • asp.net aspx 的标记验证

    我使用 asp net 创建了一个网站 在互联网上启动网站之前 我想对我使用的网络表单进行验证测试 我已经知道如何通过 W3C 标记验证服务来验证 HTML 静态网站 是否可以通过上传文件在 Webforms aspx 上执行相同的验证方法
  • 新的 SDK 项目在 Visual Studio 中缺少“启动外部命令”

    旧的 NET 项目在调试下有一个选项 允许 启动外部命令 如图所示 当我使用新的SDK样式创建新项目时 我看不到相同的选项 如下图 有办法拿回来吗 两张图片均取自同一个 VS 因此与版本无关 我发现的解决方法是正常运行程序并附加到它 但这并
  • HttpContext.Current.User.Principal 与 WindowsIdentity.GetCurrent()

    在打开 Windows 身份验证和身份模拟的 asp NET 环境中 HttpContext Current User Principal 和 WindowsIdentity GetCurrent 之间有什么区别 根据本论坛的Windows
  • Worker verticles 不并行处理请求

    我正在尝试扩展一个应用程序 该应用程序对外部应用程序进行阻塞调用以获取一些数据 请求和响应顺序并不重要 因为 它是一个阻塞调用 如 vertx 文档中所述 我正在使用工作器 verticle 工作器池设置为 5 并且我已经部署了 5 个工作
  • ASP.NET > SqlServer;信任和授权

    我们有一个系统 客户希望集成 Windows 身份验证 这是一个 ASP NET 3 5 应用程序 连接到 Sql Server 2005 Web服务器是Server 2003 R2 SP2 数据库服务器是 Server 2003 SP2
  • 外部剃刀视图看不到外部模型

    我对外部剃刀视图有疑问 在我的项目中 我有主 mvc Web 程序集和动态加载的外部类库程序集 来自 DB 及其自己的控制器 视图和模型 这些程序集在运行时不会直接引用和加载 我能够通过为控制器创建自定义控制器工厂 为视图创建自定义虚拟路径
  • 如何处理作为参数传递到方法中的 Lambda 表达式 - C# .NET 3.5

    我对 Lambda 表达式的了解有点不稳定 虽然我可以编写使用 Lambda 表达式 又名 LINQ 的代码 但我正在尝试编写自己的方法 该方法采用一些 Lambda 表达式类型的参数 背景 我正在尝试编写一个方法 该方法从任何其他对象类型
  • 在 SpriteKit 中,touchesBegan 是否与 SKScene 更新方法在同一线程中运行?

    在 Apple 文档中高级场景处理 https developer apple com library ios documentation GraphicsAnimation Conceptual SpriteKit PG Actions
  • 有没有更快的方法来获取卷序列号?

    您好 我正在使用此代码来生成机器签名 但执行起来需要相当长的时间 想知道为什么这么慢 有什么更快的方法推荐吗 Public Shared Function DriveSN ByVal DriveLetter As String As Str
  • 使用私有构造函数的 C# 单元测试类?

    好吧 我刚刚收到一个作业 我必须对具有私有构造函数的类执行单元测试 现在 当所有方法也都是非静态时 我该如何在不初始化类的情况下进行单元测试 有什么方法可以对具有私有构造函数的类进行单元测试 无需反射 如果您无法将类公开 您仍然可以通过以下
  • 测试从 ComboBox 派生的自定义控件

    我创建了一个从 ComboBox 派生的控件 并希望对其行为进行单元测试 但是 它在我的单元测试中的行为似乎与实际应用程序中的行为不同 在实际应用程序中 Combobox DataSource 属性和 Items 同步 换句话说 当我更改
  • 内存不足异常

    我正在使用 C 和 asp net 开发一个网络应用程序 我一直收到内存不足的异常 该应用程序的作用是从数据源读取一堆记录 产品 可能是数百 数千 通过向导中的设置处理这些记录 然后使用处理的产品信息更新不同的数据源 虽然有多个 DB 类
  • 合并大文件的最佳方法是什么?

    我必须合并数千个大文件 每个大约 200MB 我想知道合并这些文件的最佳方法是什么 行将有条件地复制到合并文件中 可以使用 File AppendAllLines 或使用 Stream CopyTo 吗 使用 File AppendAllL
  • 有关 Endian 性和 .Net 的详细信息?

    我有几个关于字节顺序的问题 这些问题足够相关 我保证将它们作为一个问题提出 1 字节顺序是由 Net还是由硬件决定的 2 如果是由硬件决定的 我怎样才能在C 中找出硬件的字节序 3 字节序是否影响二进制交互 例如 OR AND OR 或移位

随机推荐

  • 为什么 C++ CLI 对于托管类型没有默认参数?

    以下行有错误Default argument is not allowed public ref class SPlayerObj private void k int s 0 ERROR 为什么 C 对托管类型没有默认参数 我想知道是否有
  • 仅当列不为 NULL 时才连接列

    我有一个像这样的 SQL Server 表 PERSON NAME PHONE PHONE1 PHONE2 PHONE CONCAT Name1 12345 Null Null Null
  • Lua userdata数组访问及方法

    我正在用 C 编写一个用户数据类型 以便在 Lua 中使用 它有一些数组类型的属性和各种方法 现在如果你是这种类型 我使用u set k v resp u get k 访问数据 例如u sort 作为方法 为此我设置了 index到包含这些
  • Haskell - 让函数返回空字符

    我正在尝试创建一个函数来删除字符串中的每个第 n 个元素 dropEvery String gt Int gt String dropEvery str n map char indx gt if indx mod n 0 then cha
  • 使用 Chrome 扩展程序截取整页屏幕截图

    是否可以在 Chrome 扩展程序中捕获整个页面的屏幕截图 包括首屏以下的内容 The 捕获可见选项卡 http code google com chrome extensions tabs html似乎仅限于可见区域内显示的内容 标准方法
  • 方法被重写后,类不可序列化

    我重写一个createSocket 我的测试用例中的方法传递到模拟的套接字中 执行此操作后 对象将不再可序列化 这是一个不起作用的示例 Foo java import java io Serializable public class Fo
  • 如何在 C++ 中打印 Unicode 字符

    我正在尝试打印俄语 U 0444 http www unicode org charts PDF U0400 pdf西里尔小写字母 EF 字符 给出十进制代码1092 http en wikipedia org wiki D0 A4 使用C
  • 基于团体成员资格的额外输出

    我希望你们都度过愉快的一天 如果这是一个糟糕的问题尝试 我提前道歉 我不太擅长这个 介绍 首先 我想介绍一下我实际正在创作的内容 我为 MSP 工作 我的任务是创建一个供我们的一位客户使用的用户管理 Powershell 脚本 以便我们可以
  • 重置 Angular 7 Reactive 验证

    我使用 Angular Reactive 表单作为搜索表单 我希望能够重置表格 我用以下代码做到了这一点
  • 用于显示昨天日期和今天日期的 JavaScript 代码

    如何在我的文本框中显示昨天的日期 同时显示今天的日期 我有这个 home php 其中显示昨天的日期 用户无法修改此只读 和今天的日期 用户必须输入今天的日期 当明天到来并且用户访问主页 php 时 他 她将看到昨天输入的日期 并将再次输入
  • 抽象类型与类型参数

    在什么情况下抽象类型应该优先于类型参数 添加到我的之前关于抽象类型与参数的回答 https stackoverflow com questions 1154571 scala abstract types vs generics 11547
  • ssl.SSLError:[SSL:CERTIFICATE_VERIFY_FAILED]证书验证失败(_ssl.c:777)

    我目前正在使用 websocket client 将 python 与 QlikSense 服务器连接 对于身份验证 我使用了 Qlik sense 服务器生成的证书 即使我遵循这里提到的相同代码逻辑link https help qlik
  • Google App Engine 数据存储中最有效的一对多关系?

    抱歉 如果这个问题太简单了 我才刚上九年级 我正在尝试学习 NoSQL 数据库设计 我想设计一个谷歌数据存储模型 最大限度地减少读 写次数 以下是一对多关系中的博客文章和评论的玩具示例 将所有评论存储在 StructuredProperty
  • 如何在 Django 模型中使用枚举作为选择字段?

    我有一个模型类 我希望其中两个字段成为选择字段 因此为了填充这些选择 我使用了如下列出的枚举 models py class Transaction models Model transaction status models CharFi
  • MySQL - 将字段的默认值设置为字符串连接函数

    我有一个看起来有点像这个的表 actor forename surname stage name 我想将 stage name 更新为默认值 forename surname So that insert into actors foren
  • 删除 JSON 根

    我在 JavaScript 变量上有以下字符串 my Variable Domini cod domini 1 nom domini Sant Esteve de Palautordera cod domini 2 nom domini P
  • 对多个 Maven 项目运行 Fortify 扫描

    我有多个项目由单个父 pom 绑定 如果我使用 Maven fortify 插件在父 pom 上运行 fortify 扫描 则会生成每个项目的 fpr 文件 我希望为所有项目生成一个 fpr 文件 是否可以 感谢致敬 绍拉夫 您想要做的是聚
  • char 的符号是接口问题吗?

    假设我有一个函数 void foo char 它在内部需要将其输入视为以 NUL 结尾的字节块 例如 它是字符串上的哈希函数 我可以把论点转为unsigned char 在函数中 我还可以将声明更改为 void foo unsigned c
  • 何时在 JavaScript 中使用柯里化和偏函数

    我读了这个post http drdobbs com open source 231001821Dobb 博士关于 JavaScript 中的柯里化和部分函数的文章 它看起来很有用 但我想知道 作为 JavaScript 的临时开发人员 是
  • 如何处理 ASP.NET 中未处理的线程异常?

    ASP NET 应用程序应该如何处理非请求后台线程上发生的未处理的异常 由于错误 默认情况下 此类异常会导致进程终止 这在 ASP NET 工作进程的设置中是不可接受的因为并发运行的请求会不可预测地中止 这也是一个性能问题 请求线程上的异常