taken care of by "then()").
  Returns:
     The value held by this "Future". If the function (callback or
     RPC) creating the value has thrown an error, this "value()"
     method will also throw an error.

  Return type:
     *T*

wait()
  Block until the value of this "Future" is ready.

  If the value contains tensors that reside on GPUs, then an
  additional synchronization is performed with the kernels
  (executing on the device) which may be asynchronously populating
  those tensors. Such sync is non-blocking, which means that
  "wait()" will insert the necessary instructions in the current
  streams to ensure that further operations enqueued on those
  streams will be properly scheduled after the async kernels but,
  once that is done, "wait()" will return, even if those kernels
  are still running. No further synchronization is required when
  accessing and using the values, as long as one doesn't change
  streams.
