我有以下异步代码:
// Main system culture is English here
Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo("es");
WriteLine($"{Thread.CurrentThread.ManagedThreadId}:Culture:{Thread.CurrentThread.CurrentCulture}");
await Task.Delay(1).ConfigureAwait(false);
WriteLine($"{Thread.CurrentThread.ManagedThreadId}:Culture:{Thread.CurrentThread.CurrentCulture}");
我期望的结果是,在等待后有一个不同的线程 ID,而这个新的线程 ID 再次具有未修改的系统区域设置。
但事实并非如此;线程确实与以前不同,但是区域设置某种方式从先前的线程中流动。
如果我使用 ConfigureAwait 建议不需要保留 SynchronisationContext,为什么它还保留了区域设置呢?我的理解是区域设置不存储在 ExecutionContext 上,因此我不确定为什么会发生这种情况。
这是一个控制台应用程序。
完整示例代码:https://pastebin.com/raw/rE6vZ9Jm
SynchronizationContext
,因此ConfigureAwait(false)
实际上不会改变你发布的代码的行为 - 至少不是你期望的方式。 - Kirill Shlenskiy