    
    Returns: the value the future resolved to
    */
+  @discardableResult
   public func await() throws -> A {
     let semaphore = DispatchSemaphore(value: 0)
     self.finally(on: queue) { semaphore.signal() }


}

public func await<A>(_ future: Future<A>) throws -> A {
  return try future.await()
}

    }
  }

  @discardableResult
  public func timeout(after seconds: Double) -> Self {
    // Consider 0 as no timeout
    guard seconds > 0 else {
