本文简要介绍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=
。
相关用法
- Ruby Thread.report_on_exception=用法及代码示例
- Ruby Thread.run用法及代码示例
- Ruby Thread.raise用法及代码示例
- Ruby Thread.kill用法及代码示例
- Ruby Thread.pending_interrupt?用法及代码示例
- Ruby Thread.group用法及代码示例
- Ruby Thread.list用法及代码示例
- Ruby Thread.ignore_deadlock =用法及代码示例
- Ruby Thread.stop用法及代码示例
- Ruby Thread.abort_on_exception=用法及代码示例
- Ruby Thread.stop?用法及代码示例
- Ruby Thread.new用法及代码示例
- Ruby Thread.value用法及代码示例
- Ruby Thread.thread_variables用法及代码示例
- Ruby Thread.thread_variable?用法及代码示例
- Ruby Thread.thr[sym]用法及代码示例
- Ruby Thread.thread_variable_get用法及代码示例
- Ruby Thread.status用法及代码示例
- Ruby Thread.priority=用法及代码示例
- Ruby Thread.key?用法及代码示例
- Ruby Thread.keys用法及代码示例
- Ruby Thread.alive?用法及代码示例
- Ruby Thread.priority用法及代码示例
- Ruby Thread.handle_interrupt用法及代码示例
- Ruby Thread.current用法及代码示例
注:本文由纯净天空筛选整理自ruby-lang.org大神的英文原创作品 Thread.report_on_exception。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。