我在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;
}
我观察到只有在Framework 4.6上,C onfigureAwait(true)
正在工作,并在调用await SomeMethod().ConfigureAwait(true)
后显示相同的文化。
4.5,4.5.1和4.5.2不支持吗?
答案 0 :(得分:5)
这是.NET Framework 4.6中的一项新功能
请参阅:Task Class (System.Threading.Tasks)
从面向.NET Framework 4.6的桌面应用程序开始,创建和调用任务的线程文化成为线程上下文的一部分。也就是说,无论任务执行的线程的当前文化如何,任务的当前文化是调用线程的文化。对于在.NET Framework 4.6之前定位.NET Framework版本的应用程序,任务的文化是任务执行的线程的文化。有关更多信息,请参阅&#34;文化和基于任务的异步操作&#34; CultureInfo主题中的部分。请注意,应用商店应用会遵循Windows运行时设置并获取默认文化。
因此,新生成的任务与产生的线程具有相同的文化。