Method: Contender::FutureTask#result

Defined in:
lib/contender/future_task.rb

#result(timeout = nil) ⇒ Object

Returns The result of the future.

Parameters:

  • timeout (Integer) (defaults to: nil)

    Time to wait for the result

Returns:

  • (Object)

    The result of the future

Raises:



51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
# File 'lib/contender/future_task.rb', line 51

def result(timeout = nil)
  @mutex.synchronize do
    unless done?
      @condition.wait @mutex, timeout

      unless done?
        raise TimeoutError, 'The operation did not complete before the given timeout'
      end
    end

    if @state == :cancelled
      raise CancellationError, 'Task was cancelled before it could be completed'
    end
  end

  if @exception
    raise ExecutionError, @exception
  end

  @result
end