Microsoft's asynchronous approach is a good substitue for the
most common of the purposes for multithreaded programming:
improving responsiveness with respect to IO tasks. However, it's
important to realize that the asynchronous approach is not
capable of improving performance at all, or improving
responsiveness with respect to CPU intensive tasks.
Multithreading for Responsiveness Multithreading for
responsiveness is the traditional way to keep a program
responsive during heavy IO tasks or heavy computation tasks. You
save files on a background thread, so that the user can continue
their work, without having to wait for the hard drive to finish
its task. The IO thread often blocks waiting for some portion of
a write to finish, so context switches are frequent. Similarly,
when performing a complex calculation, you want to allow regular
context switching so the UI can remain responsive, and the user
doesn't think the program has crashed. The goal here is not, in
general, to get the multiple threads to run on d