Сегодня у меня возникла странная проблема, которая для меня не имела смысла. Вот краткое изложение:System.Web.HttpContext.Current присваивает себя после проверки кэша
Внутри метода, я проверяю для кэшированного элемента, как показано ниже:
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);
//...
}
Здесь HttpContext.Current
не равно нулю, как ожидается, в приложении ASP.NET. Затем, внутри метода cacheRatesStatusObject
, я проверяю, если HttpContext.Current
равно нулю или нет, как показано ниже:
private void cacheRatesStatusObject(RatesStatus ratesStatus) {
//...
//Seeing if HttpContext.Current is null or not first.
//and it is null here...
if (HttpContext.Current == null)
return;
//...
}
И это нуль там. Не знаю, что здесь происходит. Есть предположения?
Я заметил, что ваш метод отмечен 'async'. Чтобы быть уверенным, где бы вы ни называли этот метод, вы «ожидаете» где-то перед тем, как «Ответ» будет отправлен обратно клиенту и закрыт, правильно? В противном случае это может быть просто условие гонки, когда «Ответ» возвращается и удаляется перед тем, как попасть в эту строку, но все еще доступен в строке выше. –
@GuthMD Да, я использовал 'await' где-то внутри метода. Это должна быть проблема. – tugberk