Warum ist HttpContext.Current nach dem Warten null?

Ich habe den folgenden Test-WebAPI-Code. Ich verwende kein WebAPI in der Produktion, aber ich habe dies aufgrund einer Diskussion über diese Frage gemacht:Asynchrone WebAPI-Frage

Hier ist die anstößige WebAPI-Methode:

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";
}

Ich hatte hiermit geglaubt, dass die zweite Ausnahme da bei zu erwarten istawait abgeschlossen ist, wird es wahrscheinlich auf einem anderen Thread sein, woHttpContext.Current als Thread-statische Variable wird nicht mehr in den entsprechenden Wert aufgelöst. Nun, basierend auf dem Synchronisationskontext, könnte es tatsächlich gezwungen sein, nach dem Warten zum selben Thread zurückzukehren, aber ich tue in meinem Test nichts Besonderes. Dies ist nur eine einfache, naive Verwendung vonawait.

In Kommentaren in einer anderen Frage wurde mir das gesagtHttpContext.Current sollte sich nach einer Wartezeit auflösen. Es gibt sogar einen weiteren Kommentar zu dieser Frage, der dasselbe anzeigt. Also, was ist wahr? Sollte es auflösen? Ich denke nein, aber ich möchte eine verbindliche Antwort darauf, weilasync undawait ist neu genug, dass ich nichts definitives finden kann.

TL; DR: IstHttpContext.Current möglicherweisenull nach einemawait?

Antworten auf die Frage(3)

Ihre Antwort auf die Frage