In a single-threaded application, all operations, regardless of type, duration, or priority, execute on a single thread. Such applications are simple to design and build. All operations are serialized; that is, the operations never run concurrently, but rather one at a time. However, there are many situations in which employing multiple threads of execution in your application will increase its performance, throughput, and scalability, as well as improving its responsiveness to users and clients. That said, multithreading is one of the most poorly understood and applied concepts of contemporary programming, and many developers tend to misuse the multithreading features and services available on their programming platforms.
This chapter begins with an explanation of .NET threads and shows you how to create and use them. You’ll also learn how to spawn and manage multiple threads, develop thread-safe components, and avoid some of the common pitfalls of multithreaded programming. The chapter then moves on to discuss how to use .NET to synchronize the operations of multiple threads and manage concurrent attempts to access components. The chapter ends by describing several useful .NET multithreading services, including thread pool, timers, and thread local storage.