我有一个使用
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();
}
编辑:
我最初尝试过同步调用,但我怀疑它有副作用(父级或之前启动的子级会受到影响吗?)
public string WrappedCallTo3rdPartyLibrary(string input)
{
var ciBackup = CultureInfo.CurrentCulture;
try
{
CultureInfo.CurrentCulture = CultureInfo.InvariantCulture;
return _3rdPartyLibrary.SynchronousCall(input);
}
finally
{
CultureInfo.CurrentCulture = ciBackup ;
}
}
您建议的同步调用不应有副作用,即使它是在线程池上(即在任务中)执行的。
顺便说一句,您应该避免
Task.GetAwaiter().GetResult();
。更好地使用 Task.Wait()
和 Task.Result
。