Mark the future as being enqueued in some kind of executor for futures.
    Calling :meth:`start()` with the *as_thread* parameter as :const:`True`
    will raise a :class:`RuntimeError` after this method has been called.

    This method will also validate the state of the future.

def enqueue(self):
    """
    Mark the future as being enqueued in some kind of executor for futures.
    Calling :meth:`start()` with the *as_thread* parameter as :const:`True`
    will raise a :class:`RuntimeError` after this method has been called.

    This method will also validate the state of the future.
    """

    with self._lock:
      if self._enqueued:
        raise RuntimeError('Future object is already enqueued')
      if self._running:
        raise RuntimeError('Future object is already running')
      if self._completed:
        raise RuntimeError('Future object can not be restarted')
      if not self._worker:
        raise RuntimeError('Future object is not bound')
      self._enqueued = True