Pseudocode for async/await keywords C# with Example
Consider a simple asynchronous method: async Task Foo() { Bar(); await Baz(); Qux(); } Simplifying, we can say that this code actually means the following: Task Foo() { Bar(); Task t = Baz(); var context = SynchronizationContext.Current; t.ContinueWith(task) => { if (context == null) Qux(); else context.Post((obj) => Qux(), null); }, TaskScheduler.Current); return t; } It means that async/await keywords use current synchronization context if it exists. I.e. you can write library code that would work correctly in UI, Web, and Console applications. Source article.