为什么线程的行为与ruby中的其他内容不同? 我需要在不同的线程中运行一些代码,并且每次出现意外情况时都不会让它们消失。
Thread.new do
begin
raise "Exception"
rescue => exc
print exc
end
end
# Nothing happens
由于某种原因,此代码不执行任何操作。我之前尝试使用Thread::abort_on_exception = true
,不会改变任何事情。
那么,我如何正确处理ruby线程中的异常?
答案 0 :(得分:2)
你忘记了join()
你的主题。此代码有效:
Thread.new do
begin
raise "Exception"
rescue => exc
print exc
end
end.join
答案 1 :(得分:1)
正如Ajedi32所说,问题是程序在线程有时间写“异常”之前完成。
这里有两件事需要考虑:使用Thread::abort_on_exception = true
使程序更容易调试并避免出现令人讨厌的隐藏错误。我不应该退出程序而不确保每个线程正确结束的秒。
代码应该是:
Thread::abort_on_exception = true
my_thread = Thread.new do
begin
raise "Exception"
rescue => exc
print exc
end
end
#Do some parallel stuff
my_thread.join