Introduction
It's an unfortunate reality, but modern software development still requires developers to identify and correct bugs in their code. The familiar edit-compile-test cycle is as familiar as a text editor, and now, the rise of portable devices has added the need to measure for battery consumption and optimization for multiple architectures. Fortunately, our development tools continue to evolve to combat this rise in complexity, and Visual Studio continues to improve the arsenal.
Multi-threaded code and asynchronous code are probably the two most difficult areas for most developers to work with and also the hardest to debug when you have a problem like a race condition. A race condition occurs when multiple threads perform an operation at the same time and the order in which they execute makes a difference to how the software runs or how the output is generated. Race conditions often result in deadlocks, incorrect data being used in other calculations, and random, unrepeatable crashes...