这是我写的一个小测试。
Assert.False(ExecutionContext.IsFlowSuppressed()); // Precondition
await Task.Run(() => Task.Yield()).ConfigureAwait(false);
var isSuppressed = Utility.WasExecutionContextActuallySuppressed();
Assert.True(isSuppressed);
然而,代码' WasExecutionContextActuallySuppressed遍历堆栈,返回false - 表示上下文未被抑制 - 因为堆栈显示ExecutionContext.Run是调用者:
堆栈:
为什么这不起作用?
(注意:另一方面,如果我实际上ExecutionContext.SuppressFlow();
而不是使用ConfigureAwait(false)
,它似乎有效!)
答案 0 :(得分:2)
ConfigureAwait(false)
与抑制执行上下文无关。它只控制一件事:在SynchronizationContext
完成后,捕获的TaskScheduler
或await
是否用于恢复执行。