If your code implements I/O-bound scenarios to support network data requests, database access, or file system read/writes, asynchronous programming is the best approach. You can also write asynchronous code for CPU-bound scenarios like expensive calculations. C# has a language-level asynchronous programming model that allows you to easily write asynchronous code without having to juggle callbacks