提问人:Liero 提问时间:11/7/2023 最后编辑:Liero 更新时间:11/23/2023 访问量:73
如何确保对特定库的调用具有不同的 CultureInfo.CurrentCulture
How to ensure different CultureInfo.CurrentCulture for calls to specific library
问:
我有一个使用但必须设置为正常运行的第三方库。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();
}
- 这是为_3rdPartyLibrary设置区域性信息的正确方法吗?
- 我是否可以保证上述方法不会影响父线程?
编辑:
我最初尝试了同步调用,但我怀疑它有副作用(父线程或以前启动的子线程受到影响?
public string WrappedCallTo3rdPartyLibrary(string input)
{
var ciBackup = CultureInfo.CurrentCulture;
try
{
CultureInfo.CurrentCulture = CultureInfo.InvariantCulture;
return _3rdPartyLibrary.SynchronousCall(input);
}
finally
{
CultureInfo.CurrentCulture = ciBackup ;
}
}
答:
-1赞
Nick
11/23/2023
#1
您建议的同步调用应该不会产生副作用,即使它是在线程池上执行的,即在任务中执行。
顺便说一句,您应该避免 .更好地使用和.Task.GetAwaiter().GetResult();
Task.Wait()
Task.Result
更新
让我引用文档:
此方法旨在供编译器使用,而不是直接在代码中使用。
评论
1赞
Liero
11/23/2023
为什么 Wait() 比 GetAwaiter() 更好?GetResult()?
0赞
Nick
11/23/2023
@Liero,请参阅上面更新的答案。
0赞
Nick
11/23/2023
尽管如此,文档并不建议这样做。除非有充分的理由,否则我会避免.在这种特殊情况下,我没有看到这样的。.GetAwaiter().GetResult()
评论
Parse
TryParse
ToString
Format
Task.Factory.StartNew
async/await
Thread.CurrentCulture = = CultureInfo.InvariantCulture;
<InvariantGlobalization>false</InvariantGlobalization>
DOTNET_SYSTEM_GLOBALIZATION_INVARIANT=false
CultureInfo
,
Task