populating those tensors haven't yet completed running on the
      device, provided that the streams on which those kernels were
      enqueued are set as the current ones when this method is called.
      Put simply, it's safe to call this method immediately after
      launching those kernels, without any additional synchronization,
      as long as one doesn't change streams in between. This method
      will record events on all the relevant current streams and will
      use them to ensure proper scheduling for all the consumers of
      this "Future".
  Parameters:
     **result** (*object*) -- the result object of this "Future".

  Example::
     >>> import threading
     >>> import time
     >>> def slow_set_future(fut, value):
     ...     time.sleep(0.5)
     ...     fut.set_result(value)
     >>> fut = torch.futures.Future()
     >>> t = threading.Thread(
     ...     target=slow_set_future,
     ...     args=(fut, torch.ones(2) * 3)
