Asp.Net WebForms 4.62异步操作丢失了当前区域性

Asp.Net WebForms 4.62异步操作丢失了当前区域性,asp.net,.net,asynchronous,webforms,Asp.net,.net,Asynchronous,Webforms,我有一个异步WebForms页面(最新的.NETFramework 4.62),并像我的代码一样在InitializeCulture方法中设置了区域性。我在页面注册表SyncTask上运行异步操作,但当我从异步操作(另一个线程)得到回调时,我丢失了CurrentCulture。DefaultThreadCurrentCulture具有正确的区域性,但CurrentThread.CurrentCulture是错误的。你解决过任何人同样的问题吗 protected override void In

我有一个异步WebForms页面(最新的.NETFramework 4.62),并像我的代码一样在InitializeCulture方法中设置了区域性。我在页面注册表SyncTask上运行异步操作,但当我从异步操作(另一个线程)得到回调时,我丢失了CurrentCulture。DefaultThreadCurrentCulture具有正确的区域性,但CurrentThread.CurrentCulture是错误的。你解决过任何人同样的问题吗

 protected override void InitializeCulture()
 {    
    Thread.CurrentThread.CurrentUICulture = currentCulture;
    Thread.CurrentThread.CurrentCulture = currentCulture;
    CultureInfo.CurrentCulture = currentCulture;
    CultureInfo.CurrentUICulture = currentCulture;
    CultureInfo.DefaultThreadCurrentCulture = currentCulture;
    CultureInfo.DefaultThreadCurrentUICulture = currentCulture;
 }

当我将.Net Framework从4.51更新到4.62时,丢失线程区域性的问题就开始了。当我设置webforms page async=true时,我在event PreRenderComplete中有默认线程区域性,在InitializeCulture方法中丢失了当前区域性设置。这并不取决于我是否注册了一些异步操作。我知道异步操作回调可以在另一个线程上,但在异步方法开始执行异步操作之前,我的区域性不好。异步方法执行后的问题我可以用自定义同步上下文atd解决。。像这样的评论

我们也有同样的问题。我们通过添加以下设置来修复它:

<add key="appContext.SetSwitch:Switch.System.Globalization.NoAsyncCurrentCulture" value="true" />

和。

您确定您实际使用的线程与设置它的线程相同吗?请问您是否理解为什么它会解决此问题?我对NoAsyncCurrentCulture开关的理解是,它会停用线程之间的区域性设置流,这是我们试图避免的。我有点迷路了。我认为当页面上激活async=true时,子线程正在将其区域性/UICulture更改为默认值,而不是依赖于“区域性流”。由于“文化流”,这种变化随后传播回主线。从我的角度来看,使用NoAsyncCurrentCulture开关是一种修复我想了解的其他东西的黑客行为…@BenjaminTalmard线程区域性的处理在.net 4.6中已经更改,请参阅“对基于任务的异步模式(TAP)的更改”和。根据,我最好的猜测是,区域性设置不会返回到“父”线程,从而导致此问题。