的意外行爲如果您執行在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