def post(*args, &task)
      raise ArgumentError.new('no block given') unless block_given?
      mutex.synchronize do
        # If the executor is shut down, reject this task
        return handle_fallback(*args, &task) unless running?
        execute(*args, &task)
        true
      end
    end
def post(*args, &task)
      raise ArgumentError.new('no block given') unless block_given?
      mutex.synchronize do
        # If the executor is shut down, reject this task
        return handle_fallback(*args, &task) unless running?
        execute(*args, &task)
        true
      end
    end
Submit a task to the executor for asynchronous processing.

 @param [Array] args
   Zero or more arguments to be passed to the task

 @yield the asynchronous task to perform

 @raise [ArgumentError]
   if no task is given

 @return [Boolean]
   True if the task is queued, false if the executor is not running.