Mik*_*ond 5 c# asp.net asp.net-identity
我试图了解Asp.net身份系统的内部工作原理,并且已经看到所有async调用它似乎都使用了WithCurrentCulture()任务扩展.我查看了该扩展的源代码,但我无法弄清楚它正在做什么或为什么.
从文档
配置用于等待此任务的awaiter,以避免将延续编组回原始上下文,但保留当前的文化和UI文化.
有人可以对此有所了解吗?
它执行任务延续,Thread.CurrentCulture并Thread.CurrentUICulture设置为与调用它的线程相同的值.
默认情况下,新线程的文化设置为Windows系统文化.例如,假设您正在等待任务,并且您已明确设置Thread.CurrentCulture为不同的文化.现在当你等待一个任务时ConfigureAwait(false),await可能在与之前的代码不同的线程上执行代码await.由于它是一个不同的主题,它可能已经CurrentCulture回归到系统文化.
Thread.CurrentThread.CurrentCulture = someCulture;
await SomeTask().ConfigureAwait(false);
bool equal = Thread.CurrentThread.CurrentCulture == someCulture; // Might be false!
Run Code Online (Sandbox Code Playgroud)
如果你想让文化保持不变await,请使用WithCurrentCulture().它做同样的事情ConfigureAwait(false),但也保持文化与原始线程.
Thread.CurrentThread.CurrentCulture = someCulture;
await SomeTask().WithCurrentCulture();
bool equal = Thread.CurrentThread.CurrentCulture == someCulture; // Will be true
Run Code Online (Sandbox Code Playgroud)
请注意,如果你省略ConfigureAwait(false)和WithCurrentCulture(),之后的代码await将在同一线程上像以前一样运行,所以你不必担心任何这一点.WithCurrentCulture()仅适用于您希望通过避免额外的上下文切换来优化代码的情况.
附注:您还可以通过设置CultureInfo.DefaultThreadCurrentCulture和控制新线程的默认区域性CultureInfo.DefaultThreadCurrentUICulture.
| 归档时间: |
|
| 查看次数: |
1769 次 |
| 最近记录: |