'Return the result of the call that the future represents.
Args:
timeout: The number of seconds to wait for the result if the future
isn\'t done. If None, then there is no limit on the wait time.
Returns:
The result of the call that the future represents.
Raises:
CancelledError: If the future was cancelled.
TimeoutError: If the future didn\'t finish executing before the given
timeout.
Exception: If the call raised then that exception will be raised.'

def result(self, timeout=None):

    with self._condition:
        if (self._state in [CANCELLED, CANCELLED_AND_NOTIFIED]):
            raise CancelledError()
        elif (self._state == FINISHED):
            return self.__get_result()
        self._condition.wait(timeout)
        if (self._state in [CANCELLED, CANCELLED_AND_NOTIFIED]):
            raise CancelledError()
        elif (self._state == FINISHED):
            return self.__get_result()
        else:
            raise TimeoutError()
