Почему у меня есть заполненный HttpContext, когда используется COnfigureAwait (false)? - PullRequest
0 голосов
/ 02 июля 2019

Прежде всего, я видел этот вопрос: 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 после ожидания, верно?

1 Ответ

1 голос
/ 03 июля 2019

HttpContext.Current равно null, а не Controller.HttpContext.

await не меняет значения любой из ваших локальных переменных или переменных-членов.

Обратите внимание, что только потому, чтовы можете получить доступ, это не значит, что вы должны .HttpContext не является потокобезопасным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...