ConfigureAwait(true)仅在4.6版本上有效
本文关键字:版本 有效 仅在 true ConfigureAwait | 更新日期: 2023-09-27 18:08:38
我在Dot Net Framework 4.5, 4.5.1, 4.5.2和4.6上运行了以下代码
public async Task<int> PrintCulturesAsync()
{
Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-IN");
Console.WriteLine(Thread.CurrentThread.ManagedThreadId);
Console.WriteLine(Thread.CurrentThread.CurrentUICulture);
await SomeMethod().ConfigureAwait(true);
Console.WriteLine(Thread.CurrentThread.ManagedThreadId);
Console.WriteLine(Thread.CurrentThread.CurrentUICulture);
return 1;
}
我观察到只有在框架4.6上,C onfigureAwait(true)
在调用await SomeMethod().ConfigureAwait(true)
后工作并显示相同的文化。在4.5,4.5.1和4.5.2上不支持吗?
这是。net Framework 4.6中的一个新特性
参见:Task Class (System.Threading.Tasks)
从针对。net Framework 4.6的桌面应用程序开始,创建和调用任务的线程的文化成为线程上下文的一部分。也就是说,不管执行任务的线程的当前区域性是什么,任务的当前区域性就是调用线程的区域性。对于针对。net Framework 4.6之前版本的应用程序,任务的区域性是执行任务的线程的区域性。有关详细信息,请参阅CultureInfo主题中的"区域性和基于任务的异步操作"部分。请注意,商店应用程序在设置和获取默认区域性时遵循Windows运行时。
因此新生成的任务获得与生成的线程相同的区域性。