当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Ruby Thread.report_on_exception用法及代码示例


本文简要介绍ruby语言中 Thread.report_on_exception 的用法。

用法

report_on_exception → true or false

返回全局 “report on exception” 条件的状态。

自 Ruby 2.5 起,默认值为 true

如果异常杀死线程,则在此标志为 true 时创建的所有线程都将在 $stderr 上报告一条消息。

Thread.new { 1.times { raise } }

将在 $stderr 上产生这个输出:

#<Thread:...> terminated with exception (report_on_exception is true):
Traceback (most recent call last):
        2: from -e:1:in `block in <main>'
        1: from -e:1:in `times'

这样做是为了尽早捕获线程中的错误。在某些情况下,您可能不需要此输出。有多种方法可以避免额外的输出:

  • 如果异常不是有意的,最好是修复异常的原因,使其不再发生。

  • 如果是有意的,最好将它救到离它更近的地方,而不是让它杀死 Thread

  • 如果保证 Thread 将与 Thread#join Thread#value 连接,则在启动 Thread 时使用 Thread.current.report_on_exception = false 禁用此报告是安全的。但是,如果由于父线程被阻塞等原因导致 Thread 从未加入,这可能会在很久以后处理异常,或者根本不处理。

另见 ::report_on_exception=

还有一个实例级方法可以为特定线程设置它,请参阅 report_on_exception=

相关用法


注:本文由纯净天空筛选整理自ruby-lang.org大神的英文原创作品 Thread.report_on_exception。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。