如何在不使用.join
的情况下观察并挽救线程中发生的错误?我现在拥有的代码:
Thread.abort_on_exception = true
begin
a = Thread.new { errory_code }
rescue Exception => detail
puts detail.message
end
sleep 1 #so that thread has enough time to execute
如果我理解正确,Thread.abort_on_exception = true
中止线程执行(即引发异常)。但为什么救援没有捕获它呢?
最佳答案
您期望 rescue
操作从 Ruby 退出 begin ... end
block 后运行很长时间的代码中捕获异常。这不会发生。
请记住,当您处理线程时,事情会发生困惑。
您可以捕获的唯一异常是与线程创建相关的异常。线程内部发生的事情完全是另一个世界。
使用 join
强制您的代码等待线程完成,以便获得正确的排序。然后可以捕获线程异常。
关于Ruby 线程 : how to catch an exception without calling . 加入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26874711/