In this chapter, we discussed how to debug a multithreaded application using Thread windows for monitoring innumerable information captured by the .NET environment. We also learned how we can have a better insight into an application by using flag threads, switching among threads, having Threads and Tasks views in a Parallel Stacks window, opening up multiple Parallel Watch windows, and observing single-variable values on different tasks at a time.
In addition to this, we explored Concurrency Visualizer, which is an advanced tool used to troubleshoot complex threading issues that support Windows/console projects only.
In the next chapter, we will learn about writing unit test cases for parallel and async code and the problems associated with this. In addition, we'll learn about the challenges involved in setting up mock objects and how we can solve them.
...