Tasks are powerful but clumsy. The real power of modern multithreading libraries comes not from them, but from specialized code designed to solve specific usage patterns (pattern or a parallel pattern for short). Although I intend to cover all of the patterns implemented in the Parallel Programming Library, I'll start with a pattern you won't find there.
The Async/Await pattern comes from .NET. It allows you to start a background task (async) and execute some code in the main thread after the task completes its work (await). In Delphi, we cannot repeat the incredible usefulness of the .NET syntax, as it requires support from the compiler, but we can approximate it with something that is useful enough. Such an implementation can be found in my OmniThreadLibrary. For the purpose of this book, I have re-implemented it in the unit DHPThreading, which you...