The next pattern I want to present is Join. This is a very simple pattern that starts multiple tasks in parallel. In the Parallel Programming Library, Join is implemented as a class method of the TParallel class. To execute three methods, Task1, Task2, and Task3, in parallel, you simply call TParallel.Join with parameters collected in an array:
TParallel.Join([Task1, Task2, Task3]);
This is equivalent to the following implementation, which uses tasks:
var
tasks: array [1..3] of ITask;
tasks[1] := TTask.Run(Task1);
tasks[2] := TTask.Run(Task2);
tasks[3] := TTask.Run(Task3);
Although the approaches work the same, that doesn't mean that Join is implemented in this way. Rather than that, it uses a pattern that I haven't yet covered, a parallel for to run tasks in parallel.
The Join starts tasks but doesn't wait for them to complete. It returns an...