So far in this book, you've seen functions and objects that process their inputs immediately using a single thread of execution where the code runs to completion and produces useful results or state changes. In this chapter, you turn your attention to concurrent, parallel, asynchronous, and reactive programs. These represent substantially different approaches to programming from those you've seen so far. Some of the reasons for turning to these techniques are as follows:
To achieve better responsiveness in a graphical user interface (GUI)
To report progress results during a long-running computation and to support cancellation of these computations
To achieve greater throughput in a reactive ...