Creates a future which will resolve to a timeout exception if the given Future has not successfully completed within timeoutDuration.
the result type used in the Future.
the application's actor system.
the duration after which a Future.failed(TimeoutException) should be thrown.
a call by value Future[A]
the future that completes first, either the failed future, or the operation.