0
這是我寫的一個小測試。爲什麼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能走動的堆棧,返回false - 表示未抑制的上下文 - 由於堆棧顯示ExecutionContext.Run是呼叫者:
堆棧:
- < b__6_0> d.MoveNext
- MoveNextRunner.InvokeMoveNext
- ExecutionContext.RunInternal
- ExecutionContext.Run
爲什麼不能正常工作?
(注:在另一方面,如果我實際上做ExecutionContext.SuppressFlow();
而不是使用ConfigureAwait(false)
,似乎工作!)