的意外行为如果您执行在ASP.NET MVC下面的代码,你可以在调试窗口,它将正确恢复线程的文化await
后,即使ManagedThreadId变化看:异步/等待:ConfigureAwait
public async Task<ActionResult> Index()
{
Thread.CurrentThread.CurrentUICulture = new CultureInfo("de-DE");
Debug.WriteLine(Thread.CurrentThread.ManagedThreadId);
Debug.WriteLine(Thread.CurrentThread.CurrentUICulture);
await SomeMethod();
Debug.WriteLine(Thread.CurrentThread.ManagedThreadId);
Debug.WriteLine(Thread.CurrentThread.CurrentUICulture);
return View();
}
private async Task SomeMethod()
{
await Task.Delay(100).ConfigureAwait(false);
}
然后我刚从的someMethod()以索引()移动ConfigureAwait(假的),除了这一点,这是与上面相同的代码:
public async Task<ActionResult> Index()
{
Thread.CurrentThread.CurrentUICulture = new CultureInfo("de-DE");
Debug.WriteLine(Thread.CurrentThread.ManagedThreadId);
Debug.WriteLine(Thread.CurrentThread.CurrentUICulture);
await SomeMethod().ConfigureAwait(false);
Debug.WriteLine(Thread.CurrentThread.ManagedThreadId);
Debug.WriteLine(Thread.CurrentThread.CurrentUICulture);
return View();
}
private async Task SomeMethod()
{
await Task.Delay(100);
}
现在不恢复我的文化却始终将其设置为new CultureInfo("en-US")
。但我期望使用这两种方法,结果必须相同。现在还不清楚,为什么会这样。
'ConfigureAwait(true)'做了什么? 'bool'参数控制是否“封送原始上下文” - 是不是你想要的? –
我预计如果将'ConfigureAwait(false)'添加到'await',它会影响整个异步调用链,而不仅仅是当前的方法,因为否则使用它的性能好处很小。 – user1224129