A timeout guard turns a slow operation into a handled failure.

Timeout Guard

timeout_guard.rb
require "timeout"

limit = 
work_time = 0.02
status = "pending"

begin
  Timeout.timeout(limit) do
    sleep(work_time)
    status = "finished"
  end
rescue Timeout::Error
  status = "timed_out"
end

puts "limit=#{format('%.2f', limit)}"
puts "work_time=#{format('%.2f', work_time)}"
puts "status=#{status}"
require "timeout"

limit = 
work_time = 0.02
status = "pending"

begin
  Timeout.timeout(limit) do
    sleep(work_time)
    status = "finished"
  end
rescue Timeout::Error
  status = "timed_out"
end

puts "limit=#{format('%.2f', limit)}"
puts "work_time=#{format('%.2f', work_time)}"
puts "status=#{status}"
require "timeout"

limit = 
work_time = 0.02
status = "pending"

begin
  Timeout.timeout(limit) do
    sleep(work_time)
    status = "finished"
  end
rescue Timeout::Error
  status = "timed_out"
end

puts "limit=#{format('%.2f', limit)}"
puts "work_time=#{format('%.2f', work_time)}"
puts "status=#{status}"
timeout guard `Timeout.timeout` raises when a block runs too long, so code can recover instead of waiting forever.