Вот небольшой тест, который я написал.Почему ConfigureAwait (false) не работает с Task.Run/Task.Yield?
Assert.False(ExecutionContext.IsFlowSuppressed()); // Precondition
await Task.Run(() => Task.Yield()).ConfigureAwait(false);
var isSuppressed = Utility.WasExecutionContextActuallySuppressed();
Assert.True(isSuppressed);
Однако код «WasExecutionContextActuallySuppressed который идет стек, возвращает ложь - указывает на контекст не был подавлен - поскольку стек показывает ExecutionContext.Run является абонент:
Stack:
- < b__6_0> d.MoveNext
- MoveNextRunner.InvokeMoveNext
- ExecutionContext.RunInternal
- ExecutionContext.Run
Почему это не работает?
(Примечание: с другой стороны, если я на самом деле сделать ExecutionContext.SuppressFlow();
вместо использования ConfigureAwait(false)
, кажется, работает!)