如何从另一个线程捕获异常?
- 我想为某些特定线程而不是其他线程执行此操作,因此我无法
abort_on_exception
打开true
. - 我想在主线程中做一些有异常的事情,所以我不能简单地对异常中引发的线程中的异常做
puts
,等。pp
我在如何从建议使用的 ruby 线程中获取错误消息中找到了答案catch
,我认为这是我想要的方式,但我无法完全弄清楚如何去做。或者,还有更好的方法?我还找到了一个建议使用Queue
类的答案,但担心它可能会矫枉过正。
如何从另一个线程捕获异常?
abort_on_exception
打开true
.puts
,等。pp
我在如何从建议使用的 ruby 线程中获取错误消息中找到了答案catch
,我认为这是我想要的方式,但我无法完全弄清楚如何去做。或者,还有更好的方法?我还找到了一个建议使用Queue
类的答案,但担心它可能会矫枉过正。
如果你打开,abort_on_exception
那么你将没有机会抓住它。但是,您可以将其关闭,并在join
对线程执行操作时简单地捕获它。
thread = Thread.new do
raise "Uh oh"
end
begin
thread.join
rescue => e
puts "Caught exception: #{e}"
end
另一种方法是让线程捕获自己的异常并将其保存在以后可以从中获取的位置。例如:
exceptions = { }
Thread.new do
begin
raise "Uh oh"
rescue => e
exceptions[Thread.current] = e
end
end
sleep(1)
puts exceptions.inspect
# => {#<Thread:0x007f9832889920 dead>=>#<RuntimeError: Uh oh>}