0

这是我写的一个小测试。

        Assert.False(ExecutionContext.IsFlowSuppressed()); // Precondition

        await Task.Run(() => Task.Yield()).ConfigureAwait(false);

        var isSuppressed = Utility.WasExecutionContextActuallySuppressed();
        Assert.True(isSuppressed);

但是,遍历堆栈的代码“WasExecutionContextActuallySuppressed”返回 false - 表示上下文未被抑制 - 因为堆栈显示 ExecutionContext.Run 是调用者:

堆:

  1. <b__6_0>d.MoveNext
  2. MoveNextRunner.InvokeMoveNext
  3. ExecutionContext.RunInternal
  4. ExecutionContext.Run

为什么这不起作用?

(注意:另一方面,如果我真的这样做ExecutionContext.SuppressFlow();而不是 using ConfigureAwait(false),它似乎可以工作!)

4

1 回答 1

3

ConfigureAwait(false)与抑制执行上下文无关。它只控制一件事:是否捕获SynchronizationContextTaskScheduler用于在await完成后恢复执行。

于 2016-10-27T19:28:45.860 回答