这是我写的一个小测试。
Assert.False(ExecutionContext.IsFlowSuppressed()); // Precondition
await Task.Run(() => Task.Yield()).ConfigureAwait(false);
var isSuppressed = Utility.WasExecutionContextActuallySuppressed();
Assert.True(isSuppressed);
但是,遍历堆栈的代码“WasExecutionContextActuallySuppressed”返回 false - 表示上下文未被抑制 - 因为堆栈显示 ExecutionContext.Run 是调用者:
堆:
- <b__6_0>d.MoveNext
- MoveNextRunner.InvokeMoveNext
- ExecutionContext.RunInternal
- ExecutionContext.Run
为什么这不起作用?
(注意:另一方面,如果我真的这样做ExecutionContext.SuppressFlow();
而不是 using ConfigureAwait(false)
,它似乎可以工作!)