In this chapter, we learned about the different stages of application development where we can detect and fix problems in concurrent applications. We reviewed different testing techniques that help to prevent bugs from getting into the application code. We learned to use asynchronous unit tests, host an OWIN Web API application in memory, test HTTP API controllers, and also adapt these tests to run on the real http application hosted on a web server in a test environment.
We have reviewed different debugging tools included in Visual Studio. These tools help us to visualize the concurrent program workflow, show information about currently running TPL tasks, detect deadlocks, allow us to pause and resume threads, see the details of each thread, and help us to use asynchronous call stacks in a comfortable way, so it is clear where the current asynchronous operation has been started.
We also installed a Concurrency Visualizer extension in Visual Studio 2013 and used it to find out what...