Tôi gặp phải một vấn đề lạ ngày hôm nay mà không có ý nghĩa với tôi. Dưới đây là một bản tóm tắt:System.Web.HttpContext.Current nulls chính nó sau khi kiểm tra cho một bộ nhớ cache
Bên trong một phương pháp, tôi kiểm tra cho một mục cache như sau:
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);
//...
}
Ở đây, HttpContext.Current
không phải là null như mong đợi trong một ứng dụng ASP.NET. Sau đó, bên trong phương pháp cacheRatesStatusObject
, tôi kiểm tra nếu HttpContext.Current
là null hay không như sau:
private void cacheRatesStatusObject(RatesStatus ratesStatus) {
//...
//Seeing if HttpContext.Current is null or not first.
//and it is null here...
if (HttpContext.Current == null)
return;
//...
}
Và nó là null ở đó. Không biết chuyện gì đang xảy ra ở đây. Có suy nghĩ gì không?
Tôi đã lưu ý rằng phương pháp của bạn được đánh dấu là 'async'. Chỉ cần chắc chắn, bất cứ nơi nào bạn đang gọi phương pháp này, bạn đang làm một 'chờ đợi' một nơi nào đó trước khi 'Response' được gửi lại cho khách hàng và đóng cửa, phải không? Nếu không, nó chỉ có thể là một điều kiện chủng tộc, trong đó 'Response' đang được trả lại và xử lý trước khi đến dòng này, nhưng vẫn có sẵn ở dòng trên. –
@GuthMD Vâng, tôi đã sử dụng 'await' ở đâu đó bên trong phương thức. Đây phải là vấn đề. – tugberk