2010-03-13 27 views
17

Thông thường tôi có một lớp tĩnh mà đọc và viết để HttpContext.Current.CacheTruy cập Bộ nhớ Cache ASP.NET từ một Chủ đề Riêng biệt?

Tuy nhiên kể từ khi thêm luồng để dự án của tôi, các chủ đề tất cả có được ngoại lệ tham chiếu null khi cố gắng để lấy đối tượng này.

Có cách nào khác để tôi có thể truy cập, giải pháp thay thế hoặc bộ nhớ cache khác mà tôi có thể sử dụng không?

+2

Đây không phải là chủ đề an toàn. Kiểm tra từ khóa khóa trong cuốn sách lập trình C# yêu thích của bạn. –

+0

Chính xác bạn có ý gì khi "thêm luồng"? –

+0

@nobugz: 'System.Web.Caching.Cache' ** là ** thread-safe. Không có 'khóa' cần thiết ở đây. – Aaronaught

Trả lời

2

Nếu dự án của bạn là một dự án ASP.NET, sau đó nó được đa luồng ngay cả trước khi bạn "thêm luồng".

Kiểm tra xem nếu HttpContext.Current là không null trước khi tham chiếu HttpContext.Current.Cache.

Ngoài ra, vui lòng đăng hoàn toàn ngoại lệ bạn nhận được và hiển thị cho chúng tôi mã tham chiếu bộ nhớ cache.

36

Chính đối tượng System.Web.Cache là chủ đề an toàn.

Vấn đề là cách lấy tham chiếu đến nó theo cách hoạt động trong suốt ứng dụng của bạn. HttpContext.Current trả về null trừ khi nó được gọi trên một thread đang xử lý một yêu cầu ASP.NET. Một cách khác để có được Cache là thông qua thuộc tính tĩnh System.Web.HttpRuntime.Cache. Điều này sẽ tránh được sự cố với số HttpContext.

+3

HttpRuntime.Cache là câu trả lời đúng. – Chris

+0

Thật tuyệt, tôi không biết làm thế nào tôi không bao giờ gặp HttpRuntime ... +1, xóa câu trả lời của tôi. :) – Tanzelax

+1

+1: Đây là câu trả lời đúng. Dưới đây là một số chi tiết: http://weblogs.asp.net/pjohnson/archive/2006/02/06/437559.aspx –

Các vấn đề liên quan