C# applications often have to execute multiple tasks concurrently. For example, a C# application that simulates a car racing game must gather user inputs to navigate and move a car while concurrently moving the other cars of the game toward the finish line.