ここに私が書いた小さなテストがあります。
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)
と、うまくいくようです!)