我想在ruby中进行重试操作,区别很小:我想用计时器来做,可能没有例外。计时器应该测量所有尝试的时间
这是一个没有一个例子的例子,但是它使用“rescue”,这意味着它假定会有一个例外,而在我的代码中可能没有一个。
retry_count = 5
begin
#something
rescue
retry_count -= 1
if retry_count > 0
retry
end
end
我的目标只是确保我所做的所有尝试都不会超过一段时间。
请注意#something
是一个IO操作,可能会在不同的尝试中花费不同的时间。
如何在此处正确引入计时器,以便我不仅可以检查重试计数,还可以检查某段时间尚未通过?
答案 0 :(得分:2)
retry_count = 5
timeslice = 3 # sec
begin
started = Time.now
#something
rescue
retry_count -= 1
if retry_count > 0
sleep [timeslice - (Time.now - started), 0].max
# or, alternatively:
# time_left = timeslice - (Time.now - started)
# sleep timeleft if timeleft > 0
retry
end
end