gpt4 book ai didi

ruby - 如何从另一个线程捕获异常

转载 作者:太空宇宙 更新时间:2023-11-03 16:06:12 24 4
gpt4 key购买 nike

如何捕获另一个线程的异常?

  • 我想为某个特定线程执行此操作,而不是为其他线程执行此操作,因此我无法将 abort_on_exception 设置为 true
  • 我想在主线程中做一些有异常(exception)的事情,所以我不能简单地做 putspp 等,在引发的线程中有异常(exception)异常(exception)。

我在 How to get error messages from ruby threads 中找到了答案这建议使用 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>}

关于ruby - 如何从另一个线程捕获异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13410468/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com