does async/await method run in the same thread as caller?

async-await, c#

Solution

Have I missed something?

Sort of. `await` doesn't know anything about threads. It causes the code after the `await` keyword (by default) to run in the same `SynchronizationContext` as the caller, if it exists.

In the case of a WPF Application, the current `SynchronizationContext` is setup to marshal the call back to the UI thread, which means it will end up on the UI thread. (The same is true in Windows Forms). In a Console Application, there is no `SynchronizationContext`, so it can't post back onto that context, which means you'll end up on a ThreadPool thread.

If you were to install a custom `SynchronizationContext` into `SynchronizationContext.Current`, the call would post there. This is not common in Console Applications, however, as it typically requires something like a "message loop" to exist to work properly.

Problem

I have read that async/await methods runs in the same thread as caller and I saw it in a WPF application but while testing a code in console application I see it is running in a different thread than caller. Have I missed something?

Original source