Por que o HttpContext.Current é null após aguardar?

Eu tenho o seguinte código WebAPI de teste, eu não uso WebAPI em produção, mas eu fiz isso por causa de uma discussão que tive sobre essa questão:Pergunta do Async do WebAPI

De qualquer forma, aqui está o método WebAPI ofensivo:

public async Task<string> Get(int id)
{
    var x = HttpContext.Current;
    if (x == null)
    {
        // not thrown
        throw new ArgumentException("HttpContext.Current is null");
    }

    await Task.Run(() => { Task.Delay(500); id = 3; });

    x = HttpContext.Current;
    if (x == null)
    {
        // thrown
        throw new ArgumentException("HttpContext.Current is null");
    }

    return "value";
}

Eu tinha acreditado que a segunda exceção é esperada porque quando oawait completa, provavelmente será em um segmento diferente ondeHttpContext.Current como uma variável estática de thread não será mais resolvida para o valor apropriado. Agora, com base no contexto de sincronização, ele pode realmente ser forçado a voltar ao mesmo thread após o aguardo, mas não estou fazendo nada sofisticado em meu teste. Este é apenas um uso simples e ingênuo deawait.

Em comentários em outra pergunta me disseram queHttpContext.Current deve resolver depois de um aguardo. Há até outro comentário sobre essa questão indicando o mesmo. Então, o que é verdade? Deve resolver? Eu acho que não, mas eu quero uma resposta autoritária sobre isso, porqueasync eawait é novo o suficiente para não encontrar nada definitivo.

TL; DR: éHttpContext.Current potencialmentenull depois de umawait?

questionAnswers(3)

yourAnswerToTheQuestion