首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >.net-4.6中的异步Thread.CurrentThread.CurrentCulture

.net-4.6中的异步Thread.CurrentThread.CurrentCulture
EN

Stack Overflow用户
提问于 2017-06-06 14:14:31
回答 1查看 1.2K关注 0票数 3

由于以下来自微软的信息,我稍微更新了我的代码。听起来他们把现在的文化更新到我可以用的东西了。

对于针对.NET Framework4.6及更高版本的应用程序,CultureInfo.CurrentCulture和CultureInfo.CurrentUICulture存储在线程的ExecutionContext中,后者跨异步操作流动。(资料来源:https://msdn.microsoft.com/en-us/library/dn833123(v=vs.110).aspx

代码语言:javascript
复制
using System;
using System.Globalization;
using System.Threading;
using System.Threading.Tasks;

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("start " + Thread.CurrentThread.CurrentCulture.ToString() + " " + Thread.CurrentThread.ManagedThreadId);
        RunAsync().Wait();
        Console.WriteLine("Finish " + Thread.CurrentThread.CurrentCulture.ToString() + " " + Thread.CurrentThread.ManagedThreadId);
        Console.ReadKey();
    }

    static async Task RunAsync()
    {
        Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("de-DE");

        Console.WriteLine("1 " + Thread.CurrentThread.CurrentCulture.ToString() + " " + Thread.CurrentThread.ManagedThreadId);
        string cultureInTask = string.Empty;

        await Task.Run(() => cultureInTask = Thread.CurrentThread.CurrentCulture.ToString() + " " + Thread.CurrentThread.ManagedThreadId).ConfigureAwait(true);

        Console.WriteLine("2 " + cultureInTask);
        string twoA = await TestMethodAsync();
        Console.WriteLine("2a " + twoA + " " + Thread.CurrentThread.ManagedThreadId);
        Console.WriteLine("3 " + Thread.CurrentThread.CurrentCulture.ToString() + " " + Thread.CurrentThread.ManagedThreadId);            
    }

    public static async Task<string> TestMethodAsync()
    {
        Console.WriteLine("2s " + Thread.CurrentThread.CurrentCulture.ToString() + " " + Thread.CurrentThread.ManagedThreadId);
        return await Task.Run(() =>
        {
            return System.Threading.Thread.CurrentThread.CurrentUICulture.ToString() + " " + Thread.CurrentThread.ManagedThreadId;
        });
    }
}

输出:

代码语言:javascript
复制
start en-US 1
1 de-DE 1
2 de-DE 3
2s de-DE 3
2a en-US 4 4
3 de-DE 4
Finish en-US 1

但为什么2a会返回美国而不是DE?是因为executionContext不一样吗?如果是这样,我如何才能保持在相同的执行上下文中?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-06-06 14:35:28

CurrentCultureCurrentUICulture是两个独立的属性。您只是在设置CurrentCulture,并且在任何地方都报告,除了2a,它报告CurrentUICulture。如果在整个代码中始终使用相同的属性(这两个属性都应该可以),它将给出预期的结果。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44392456

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档