本文簡要介紹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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。