當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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