First off, the article you referenced is talking about BackgroundWorker
and not async
. BackgroundWorker
still works the same way in .NET 4.5, and still has the limitation around nested calls.
For a description of how async
works with SynchronizationContext
, you can look at the end of that article or read my intro on async
. In short, when an await
is encountered, by default it will capture the current SynchronizationContext
(or if it's null
, the current TaskScheduler
), and use that to schedule the continuation.