什么是Environment.FailFast?

时间:2009-02-19 09:53:33

标签: c# .net vb.net

什么是Environment.FailFast?

它有用吗?

9 个答案:

答案 0 :(得分:28)

它用于终止应用程序,它是一个静态方法,可以立即杀死应用程序,而不会被任何异常块捕获。

  

Environment.FastFail(String)即可   实际上是一个很好的调试工具。   例如,假设你有一个   应用程序只是彻头彻尾的   给你一些奇怪的输出。你有   不明白为什么。你知道这是错的,但是   冒泡没有例外   到表面来帮助你。好,   如果您有权访问Visual Studio   2005年的Debug-> Exceptions ...菜单项,   你实际上可以告诉Visual Studio   让你看到第一次机会   例外。如果你没有,   但是你可以放   Environment.FastFail(String)中的   例外,并使用演绎推理   找出消除的过程   你的问题在哪里。

Reference

答案 1 :(得分:12)

它还会创建一个转储和事件查看器条目,这可能很有用。

答案 2 :(得分:7)

这是一种立即退出应用程序而不会抛出异常的方法。

文档为here

在某些安全或数据关键环境中可能会有用。

答案 3 :(得分:5)

Failfast可用于可能危及用户数据的情况。在数据库引擎中说,当您检测到内部数据结构损坏时,唯一合理的做法是尽快停止进程,以避免将垃圾写入数据库并冒着破坏它并冒失去用户数据的风险。这是failfast很有用的一种可能方案。

另一个用途是捕获程序员错误。假设您正在编写库,并且某些函数接受在任何情况下都不能为null的指针,也就是说,如果它为null,则显然存在程序员错误。你可以返回一个像E_POINTER这样的错误或抛出一些InvalidArgument异常并希望有人注意到,但你会因为快速失败而更好地引起他们的注意: - )

请注意,我并不是将示例限制为指针,您可以概括为任何永远不会发生的参数或条件。快速失败最终会带来质量更好的应用程序,因为许多错误不再被忽视。

最后,快速失败有助于尽可能忠实地捕获进程状态(当创建内存转储时),特别是在检测到不可恢复的错误或真正意外时快速快速失败时条件。

如果允许进程继续,那么说'finally'子句将会运行,或者堆栈将被解除,并且在进行内存转储之前,事情会被破坏或丢弃,然后进程的状态可能会被改变的方式使得诊断问题的根本原因变得更加困难。

答案 4 :(得分:4)

它会杀死应用程序,甚至会跳过try / finally块。

答案 5 :(得分:3)

从这里引用: https://msdn.microsoft.com/en-us/library/ms229030(v=vs.110).aspx

  

✓考虑通过调用 System.Environment.FailFast (.NET Framework 2.0功能)来终止该过程,而不是在代码遇到进一步执行不安全的情况时抛出异常

答案 6 :(得分:0)

乔·达菲(Joe Duffy)在这里讨论了快速失败和使其有用的纪律。

http://joeduffyblog.com/2014/10/13/if-youre-going-to-fail-do-it-fast/

从本质上讲,他是说对于编程错误-例如,意外错误是程序员的错,而不是程序用户的错,而不是程序用户或其他输入或合理的预期情况是错误的-然后决定总是会因意外错误而快速失败,从而提高了代码质量。

我认为,由于这是可选的团队决策和纪律,因此在C#中很少使用此API,因为实际上我们大多数人最多都是为HR或在线商店中的12个人编写LoB应用程序。

因此,对于我们来说,当我们希望拒绝API使用者进一步采取行动的机会时,我们可能会使用它。

答案 7 :(得分:0)

在 Task 中抛出(或重新抛出)的未处理异常在 Task 被垃圾收集之前不会生效,可能是在某个随机时间之后。

此方法可让您立即使进程崩溃 -- 参见 this answer

答案 8 :(得分:-1)

根据Microsoft文档,它说,如果您选择处理/捕获某些异常,那么您应该在catch块中调用Enviroment.FailFast方法,这样该方法将终止您的应用程序并向系统事件添加一个条目日志。