- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
根据 MSDN,AppDomain.Unload 会导致卸载 AppDomain 内的所有线程抛出线程中止异常。
The threads in domain are terminated using the Abort method, which throws a ThreadAbortException in the thread. Although the thread should terminate promptly, it can continue executing for an unpredictable amount of time in a finally clause. -- from MSDN
所以我的理解是,每次我在任何地方编写预期在此 AppDomain 中运行的代码时,我都必须预料到线程中止可能随时在任何线程上发生。这是真的? 所有代码是否都应该假设 ThreadAbortException 可以随时抛出?
实际上这实际上消除了 catch(Exception ex) 因为这会捕获 ThreadAbortException 并尝试处理它,通常是通过记录一个实际上不应该记录的错误(因为卸载 AppDomain 不是'这真的是个异常(exception))。
是否需要采取任何其他注意事项来避免不必要的异常处理/错误记录?
最佳答案
您对任何时候发生 TAE 的可能性的预期几乎都是正确的。我要说的唯一一点是,您的代码可能应该已经以这种方式编写 - 在处理具有可靠性要求的数据时,您应该在硬件故障、运算符(operator)错误、OOM 等情况下使用事务或其他补偿机制 - 任何其中并非 AppDomain 关闭的场景所独有。
最后,您应该知道您可以捕获 TAE 并在 catch block 中执行补偿代码。它们唯一的特别之处在于它们会在 catch block 之后立即被重新抛出,所以你不能“吞下”它们。您可以使用 Thread.ResetAbort()
来抑制它们,但在这种情况下,这可能不是预期的效果。
我们都写过这样的代码:
public void Foo() {
try {
Do.Some.Stuff();
} catch (Exception ex) {
Console.Out.WriteLine("Oh noes!");
}
}
是的,catch block 将捕获所有内容1,包括 TAE 和 OOM。
这里要记住的是,对于上述所有异常(exception)情况,世界基本上已经结束了。您应该关心的是,您正在处理的任何事务敏感数据都不会丢失或处于不良状态,这就是为什么我们通常将事务安全 I/O 之类的事情留给 Microsoft 和 Oracle 的聪明人谁写数据库。例如,如果您的代码正在执行平面文件 I/O,您需要非常确定永远不会让文件处于不良状态,那么您应该以非常全面的方式考虑故障模式- 比如“如果这个文件写到一半就断电了怎么办?”
1 唯一的异常(exception)是 StackOverflow exceptions generally cannot be caught .这是 .NET 2.0 中的更改。
关于c# - 如何处理 AppDomain.Unload 和相关的 ThreadAbortException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9416078/
----- 简而言之----- 我有一个文件,比如x.html,它加载到其他文件的一些div中(使用函数jquery.load)。 但是x.html需要知道是否在您的位置加载了另一个html。 那么,
美好的一天, 我有java web应用程序,我会在登录后执行类似以下操作: 登录后,系统将显示登陆页面,在登陆页面中,会有一个选项卡菜单,并且选项卡菜单中有许多模块可以触发以导航到不同的页面。 我需要
这个问题在这里已经有了答案: 9年前关闭。 Possible Duplicate: how to delete the pluginassembly after AppDomain.Unload(do
我想在用户使用 jQuery 放弃特定页面时执行操作方法。 该页面有以下代码: $(window).unload(function () { aler
我加载了两个模块(NecessaryModule1.hs 和 NecessaryModule2.hs,如 Haskell : loading ALL files in current director
当用户单击提交按钮并执行操作时,我需要使用 VBA 关闭 Excel 用户窗体。 如何关闭用户表单本身? 我已经尝试过此操作,但它返回 361 错误。 Unload Me 最佳答案 正如最上面的答案所
我尝试运行以下查询以从 Redshift 卸载到 S3,但收到无益的错误。我们尝试转义所有可能导致问题的字符,并传入参数(包装程序是Python): unload ('select
我无法在 SO 上找到使用 Java VM (JVM) 参数来记录类卸载的 Web 搜索工作方式。 这里http://www.herongyang.com/JVM/ClassLoader-JVM-Op
我正在使用 NodeJS-ReactJS 同构应用程序,当我单击 Link 时,我收到一条错误消息 未捕获( promise )错误:请求已终止 可能原因:网络不在线、Access-Control-A
我有以下代码: D $(window).unload( function () { alert("Bye now!"); } );
我正在阅读 jQuery API Documentation 中给出的函数 .unload() 的 jQuery 文档。 上面写得很清楚,.unload()将在1.8之后的版本中被弃用,并在3.x中被
我们一直遇到一个奇怪的问题,我不确定如何解决,我认为这可能与最近的 Google Chrome 更新有关,但我想要一些方法在错误跟踪器上打开问题之前检查自己的健全性。 问题 我们有一个内部网络应用程序
我正在使用 PHP + MySQL + JavaScript 制作一个小型聊天应用程序,我编写了一个函数 disonnectUser(),当用户按下断开连接按钮时调用该函数。在这里: function
我继承了一个 web 框架,以前的开发人员在页面生命周期的 init/unload 方法中打开和关闭了他的数据库连接。构造函数本质上是这样的(为了说明重点而简化); public class Base
我需要在 c#/.net 中实现一个插件架构以便加载 自定义用户定义的操作 自定义数据网格的数据类型处理代码/转换/... 来自非静态链接程序集文件。 因为应用程序必须处理许多自定义用户定义的操作,所
XNA 游戏有一个 Unload() 方法,其中的内容应该被卸载。但这有什么意义呢?如果正在卸载所有内容,那么游戏肯定正在退出,在这种情况下所有内容都会被垃圾收集,对吧? 最佳答案 据我所知,它对任何
根据多种资源(例如,通过 C# 的 MSDN 和 CLR),当我们调用 AppDomain.Unload(userDomain) 时,userDomain 中的线程将被强制抛出 ThreadAbort
到目前为止的故事是这样的,我有一个使用 AppDomain 来执行某些任务的 worker thingy。该域的设置和拆卸成本很高。所以我为工作人员创建了一个 WeakReference 对象的每个线
我正在尝试在卸载页面之前向服务器发帖,然后我关注了 this它工作正常。我的问题是 window.unload 上的 $.post 在它卸载后 被触发。我尝试使用注销链接并检查我的日志,我得到以下信息
任何人都可以解释为什么下面的行会在运行时出现在输出控制台中? (一个可能的答案是完全 permGen,但这可以排除,因为该程序仅使用 PermGen 中可用的 max100MB 中的 24MB) [卸
我是一名优秀的程序员,十分优秀!