Join
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);
Note
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 ITask
interface representing a new, composite task, which only exits when all of its subtasks finish execution. You can do with this task anything...