class Concurrent::ImmediateExecutor

@note Intended for use primarily in testing and debugging.
during testing because it makes all operations deterministic.
that thread until the operation is complete. This can be very beneficial
it immediately runs every ‘#post` operation on the current thread, blocking
This executor service exists mainly for testing an debugging. When used
received and no two operations can be performed simultaneously.
blocking as necessary. Operations are performed in the order they are
An executor service which runs all operations on the current thread,

def <<(task)

@!macro executor_service_method_left_shift
def <<(task)
  post(&task)
  self
end

def initialize

Creates a new executor
def initialize
  @stopped = Concurrent::Event.new
end

def post(*args, &task)

@!macro executor_service_method_post
def post(*args, &task)
  raise ArgumentError.new('no block given') unless block_given?
  return false unless running?
  task.call(*args)
  true
end

def running?

@!macro executor_service_method_running_question
def running?
  ! shutdown?
end

def shutdown

@!macro executor_service_method_shutdown
def shutdown
  @stopped.set
  true
end

def shutdown?

@!macro executor_service_method_shutdown_question
def shutdown?
  @stopped.set?
end

def shuttingdown?

@!macro executor_service_method_shuttingdown_question
def shuttingdown?
  false
end

def wait_for_termination(timeout = nil)

@!macro executor_service_method_wait_for_termination
def wait_for_termination(timeout = nil)
  @stopped.wait(timeout)
end