Ho riscontrato un problema strano oggi che non aveva senso per me. Ecco un riassunto:System.Web.HttpContext.Current si annulla da solo dopo aver controllato per una cache
all'interno di un metodo, ho verificare la presenza di un elemento memorizzato nella cache, come di seguito:
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);
//...
}
Qui, il HttpContext.Current
non è nulla come previsto all'interno di un'applicazione ASP.NET. Poi, all'interno del metodo cacheRatesStatusObject
, controllo se HttpContext.Current
è nulla o non come di seguito:
private void cacheRatesStatusObject(RatesStatus ratesStatus) {
//...
//Seeing if HttpContext.Current is null or not first.
//and it is null here...
if (HttpContext.Current == null)
return;
//...
}
ed è nullo lì. Non ho idea di cosa stia succedendo qui. qualche idea?
Ho notato che il metodo è contrassegnato come 'async'. Giusto per sicurezza, ovunque tu stia chiamando questo metodo, stai facendo un 'await' da qualche parte prima che il' Response' venga rispedito al client e chiuso, giusto? Altrimenti potrebbe essere solo una condizione di competizione, in cui il 'Response' viene restituito e disposto prima di arrivare a questa linea, ma ancora disponibile nella riga sopra. –
@GuthMD Sì, ho usato 'await' da qualche parte all'interno del metodo. Questo deve essere il problema. – tugberk