Blocks the current task until this task completes.
If the task failed, every join throws its original exception object. An unjoined task failure does not terminate other tasks; the failure is retained until the process finishes.