task_join(t, @optional timeout, timeout_val)
Causes the current task to wait until the task t terminates (normally or not) or until the
timeout is reached (if timeout is supplied). If timeout is reached,
return timeout_val (if it is supplied), otherwise a join-timeout-exception object
is raised. If t terminated normally, the content of its end-result field is
returned, otherwise the content of its end-exception field is raised. (Both these fields are private to
the task object and cannot be accesses through other means).