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

ConfigureAwait(true)仅在4.6版本上有效

这是。net Framework 4.6中的一个新特性

参见:Task Class (System.Threading.Tasks)

从针对。net Framework 4.6的桌面应用程序开始,创建和调用任务的线程的文化成为线程上下文的一部分。也就是说,不管执行任务的线程的当前区域性是什么,任务的当前区域性就是调用线程的区域性。对于针对。net Framework 4.6之前版本的应用程序,任务的区域性是执行任务的线程的区域性。有关详细信息,请参阅CultureInfo主题中的"区域性和基于任务的异步操作"部分。请注意,商店应用程序在设置和获取默认区域性时遵循Windows运行时。

因此新生成的任务获得与生成的线程相同的区域性。