Module: Concurrent

Defined in:
lib/concurrent/actor.rb,
lib/concurrent/agent.rb,
lib/concurrent/event.rb,
lib/concurrent/future.rb,
lib/concurrent/promise.rb,
lib/concurrent/version.rb,
lib/concurrent/contract.rb,
lib/concurrent/runnable.rb,
lib/concurrent/utilities.rb,
lib/concurrent/obligation.rb,
lib/concurrent/supervisor.rb,
lib/concurrent/timer_task.rb,
lib/concurrent/scheduled_task.rb,
lib/concurrent/dereferenceable.rb,
lib/concurrent/fixed_thread_pool.rb,
lib/concurrent/cached_thread_pool.rb,
lib/concurrent/global_thread_pool.rb,
lib/concurrent/fixed_thread_pool/worker.rb,
lib/concurrent/cached_thread_pool/worker.rb,
lib/concurrent/event_machine_defer_proxy.rb

Defined Under Namespace

Modules: Dereferenceable, Obligation, Postable, Runnable, UsesGlobalThreadPool Classes: Actor, Agent, CachedThreadPool, Contract, Event, EventMachineDeferProxy, FixedThreadPool, Future, NullThreadPool, Promise, ScheduledTask, Supervisor, TimerTask

Constant Summary collapse

VERSION =
'0.3.2'
TimeoutError =
Class.new(StandardError)

Class Method Summary collapse

Class Method Details

.timeout(seconds) ⇒ Object



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# File 'lib/concurrent/utilities.rb', line 7

def timeout(seconds)

  thread = Thread.new do
    Thread.current[:result] = yield
  end
  success = thread.join(seconds)

  if success
    return thread[:result]
  else
    raise TimeoutError
  end
ensure
  Thread.kill(thread) unless thread.nil?
end