【发布时间】:2012-02-24 02:28:39
【问题描述】:
我正在寻找异常处理经典问题的解决方案。考虑以下代码:
def foo(n)
puts " for #{n}"
sleep n
raise "after #{n}"
end
begin
threads = []
[5, 15, 20, 3].each do |i|
threads << Thread.new do
foo(i)
end
end
threads.each(&:join)
rescue Exception => e
puts "EXCEPTION: #{e.inspect}"
puts "MESSAGE: #{e.message}"
end
此代码在 5 秒后捕获异常。
但是如果我将数组更改为[15, 5, 20, 3],上面的代码会在 15 秒后捕获异常。简而言之,它总是捕获第一个线程中引发的异常。
任何想法,为什么会这样。为什么每次 3 秒后都没有捕捉到异常?如何捕获任何线程引发的第一个异常?
【问题讨论】:
标签: ruby multithreading exception-handling