c# – 为什么在ConfigureAwait之后保留文化(false)

c# – 为什么在ConfigureAwait之后保留文化(false),第1张

概述我有以下异步代码: // Main system culture is English hereThread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo("es");WriteLine($"{Thread.CurrentThread.ManagedThreadId}:Culture:{Thread.CurrentThre 我有以下异步代码:
// Main system culture is English hereThread.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

解决方法 这是.NET 4.6的预期行为.

JulIEn无法重现它的原因是他可能针对框架的较低版本(例如,在4.5.2中,文化不会流动).

关于这个主题的Here is the official documentation.

具体请注意以下几点:

… starting with apps that target the .NET Framework 4.6,asynchronous operations by default inherit the values of the CurrentCulture and CurrentUICulture propertIEs of the thread from which they are launched. If the current culture or current UI culture differs from the system culture,the current culture crosses thread boundarIEs and becomes the current culture of the thread pool thread that is executing an asynchronous operation.

总结

以上是内存溢出为你收集整理的c# – 为什么在ConfigureAwait之后保留文化(false)全部内容,希望文章能够帮你解决c# – 为什么在ConfigureAwait之后保留文化(false)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1262474.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存