如何确保调用特定库时使用不同的CultureInfo.CurrentCulture

问题描述 投票:0回答:1

我有一个使用

CultureInfo.CurrentCulture
的第三方库,但必须将其设置为
InvariantCulture
才能正常运行。

我的多线程应用程序使用本地化的

CultureInfo.CurrentCulture

public string WrappedCallTo3rdPartyLibrary(string input)
{
    //use new thread to isolate CurrentCulture side effects.
    return Task.Factory.StartNew(() =>
    {
        CultureInfo.CurrentCulture = CultureInfo.InvariantCulture;
        string result = _3rdPartyLibrary.SynchronousCall(input);
        return result;
    }).GetAwaiter().GetResult();
}
  1. 这是为 _3rdPartyLibrary 设置文化信息的正确方法吗?
  2. 我能保证上述方法不会影响父线程吗?

编辑:

我最初尝试过同步调用,但我怀疑它有副作用(父级或之前启动的子级会受到影响吗?)

public string WrappedCallTo3rdPartyLibrary(string input)
{
    var ciBackup = CultureInfo.CurrentCulture;
    try
    {
       CultureInfo.CurrentCulture = CultureInfo.InvariantCulture;
       return _3rdPartyLibrary.SynchronousCall(input);
    }
    finally
    { 
        CultureInfo.CurrentCulture = ciBackup ;
    }
}
c# multithreading .net-core task-parallel-library cultureinfo
1个回答
0
投票

您建议的同步调用不应有副作用,即使它是在线程池上(即在任务中)执行的。

顺便说一句,您应该避免

Task.GetAwaiter().GetResult();
。更好地使用
Task.Wait()
Task.Result

© www.soinside.com 2019 - 2024. All rights reserved.