¿Por qué es HttpContext.Current nulo después de esperar?
Tengo el siguiente código de prueba de WebAPI, no uso WebAPI en producción, pero hice esto debido a una discusión que tuve sobre esta pregunta:WebAPI Async question
De todos modos, aquí está el método ofensivo de WebAPI:
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";
}
Creía que se esperaba la segunda excepción porque cuando elawait
completa, probablemente estará en un hilo diferente dondeHttpContext.Current
como una variable subproceso-estática ya no se resolverá al valor apropiado. Ahora, en función del contexto de sincronización, en realidad podría verse obligado a volver al mismo hilo después de la espera, pero no estoy haciendo nada sofisticado en mi prueba. Esto es solo un uso simple e ingenuo deawait
.
En comentarios en otra pregunta me dijeron queHttpContext.Current
debe resolver después de una espera. Incluso hay otro comentario sobre esta pregunta que indica lo mismo. Entonces, ¿qué es verdad? ¿Debe resolverse? Creo que no, pero quiero una respuesta autorizada sobre esto porqueasync
yawait
Es lo suficientemente nuevo como para no encontrar nada definitivo.
TL; DR: esHttpContext.Current
potencialmentenull
después de unawait
?