class Concurrent::PerThreadExecutor

def self.post(*args)

def self.post(*args)
  raise ArgumentError.new('no block given') unless block_given?
  Thread.new(*args) do
    Thread.current.abort_on_exception = false
    yield(*args)
  end
  return true
end

def <<(task)

def <<(task)
  PerThreadExecutor.post(&task)
  return self
end

def post(*args, &task)

def post(*args, &task)
  return PerThreadExecutor.post(*args, &task)
end