当我使用Thread.new{}来生成一个线程时,似乎在该线程中发生的任何异常都不会被捕获,应用程序会静默地忽略它。
通常情况下,线程彼此隔离,因此一个线程中的异常不会终止整个应用程序。
但是,虽然我从未使用过它们,Thread
类有几个abort_on_exception
方法,甚至带有一些示例。它们应该能够达到您想要的效果。
http://corelib.rubyonrails.org/classes/Thread.html
除了Nikita的答案之外,你也可以通过在生成的线程上调用thread.join
来触发异常。
如果使用调试标志运行程序(ruby -d
),则在线程中引发未处理异常时也会中止程序。