Прежде всего, я видел этот вопрос: ConfigureAwait (false) не делает HttpContext NULL, как ожидалось , но я все еще не могу объяснить, что происходит.
Здесь у меня есть два метода:
public async Task<ActionResult> Contact2()
{
var h = new HttpClient();
var sc = SynchronizationContext.Current;
HttpContext.Session["x"] = "d";
var s = await h.GetStringAsync("http://www.google.com").ConfigureAwait(false);
var contextIsNull = HttpContext == null;
return View();
}
public async Task<ActionResult> Contact()
{
var h = new HttpClient();
var sc = SynchronizationContext.Current;
HttpContext.Session["x"] = "d";
await Task.Delay(2000).ConfigureAwait(false);
var contextIsNull = HttpContext == null;
return View();
}
При выполнении обоих из них SynchronizationContext.Current
является нулевым, как ожидалось, но HttpContext
не является нулевым, и в обеих ситуациях у меня есть доступ к Session
. Почему это? Почему HttpContext
не нуль? Контекст был изменен, потому что я прочитал HttpContext
после ожидания, верно?