ConfigureAwait(true)仅适用于4.6

时间:2015-08-19 14:06:29

标签: c# .net async-await thread-local-storage

我在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不支持吗?

1 个答案:

答案 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运行时设置并获取默认文化。

因此,新生成的任务与产生的线程具有相同的文化。