Hoy me encontré con un problema extraño que no tenía sentido para mí. He aquí un resumen:System.Web.HttpContext.Current se anula después de buscar un Caché
dentro de un método, puedo comprobar si hay un elemento de la caché de la siguiente manera:
private async Task<RatesStatus> getRatesStatusAsync() {
//...
if (_currentHttpContext != null) {
//Here, I am checking for a Cached item
var cachedRatesStatusObj = HttpContext.Current.Cache[Constants.RATESSTATUS_CACHE_KEY_NAME];
if (cachedRatesStatusObj != null)
return (RatesStatus)cachedRatesStatusObj;
}
//...
cacheRatesStatusObject(ratesStatus);
//...
}
Aquí, el HttpContext.Current
no es nulo como se espera dentro de una aplicación ASP.NET. Entonces, dentro del método cacheRatesStatusObject
, puedo comprobar si HttpContext.Current
es nulo o no de la siguiente manera:
private void cacheRatesStatusObject(RatesStatus ratesStatus) {
//...
//Seeing if HttpContext.Current is null or not first.
//and it is null here...
if (HttpContext.Current == null)
return;
//...
}
y es nula allí. No tengo idea de lo que está pasando aquí. ¿Alguna idea?
me señaló que su método está marcado 'async'. Solo para estar seguro, donde sea que llames a este método, estás haciendo 'esperar' en alguna parte antes de que la 'Respuesta' se envíe de vuelta al cliente y se cierre, ¿verdad? De lo contrario, podría ser simplemente una condición de carrera, donde la 'Respuesta 'se devuelve y elimina antes de llegar a esta línea, pero todavía está disponible en la línea superior. –
@GuthMD Sí, utilicé 'await' en algún lugar dentro del método. Este debe ser el problema. – tugberk