Итак, обобщая все, о чем говорилось до сих пор, получаем следующие правила, которые определяют, где должен выполняться код после await:
• если задача уже завершилась, то код продолжает выполняться в том же потоке — ConfigureAwait(false) в этом случае не оказывает никакого влияния;
• если для текущего потока задан SynchronizationContext и ConfigureAwait(false) не задействуется, то для выполнения кода после await будет использоваться SynchronizationContext;
• во всех остальных случаях код будет выполняться в пуле потоков.
C# Concurrency. Асинхронное программирование и многопоточность
·
Нир Добовицки