Method: Async::Scheduler#with_timeout
- Defined in:
- lib/async/scheduler.rb
#with_timeout(duration, exception = TimeoutError, message = "execution expired", &block) ⇒ Object
Invoke the block, but after the specified timeout, raise TimeoutError in any currenly blocking operation. If the block runs to completion before the timeout occurs or there are no non-blocking operations after the timeout expires, the code will complete without any exception.
553 554 555 556 557 558 559 560 561 562 563 564 565 |
# File 'lib/async/scheduler.rb', line 553 def with_timeout(duration, exception = TimeoutError, = "execution expired", &block) fiber = Fiber.current timer = @timers.after(duration) do if fiber.alive? fiber.raise(exception, ) end end yield timer ensure timer&.cancel! end |