Giả định đó có đúng không?
Không, giả định này là not correct và có evidence cho nó. Cơ chế lưu trữ yêu cầu đáng tin cậy duy nhất trong ASP.NET là HttpContext.Items
.
Không bao giờ sử dụng [ThreadStatic]
trường để lưu trữ giá trị theo yêu cầu trong ứng dụng ASP.NET. Ví dụ nếu bạn có bộ điều khiển không đồng bộ, bạn có thể yêu cầu động cơ rút một yêu cầu từ nhóm chủ đề để bắt đầu phân phối yêu cầu, sau đó khởi tạo một hoạt động không đồng bộ dựa trên IOCP (Cổng Hoàn thành I/O) và cuối cùng rút ra một luồng khác từ hồ bơi để hoàn thành yêu cầu. Vì vậy, bạn có thể có 2 chủ đề khác nhau phục vụ cùng một yêu cầu HTTP.
Tuyệt đối không bao giờ phụ thuộc vào thực tế rằng yêu cầu HTTP sẽ được phân phối bởi cùng một chuỗi.
Điều này có thể đúng trong một số trường hợp cho các yêu cầu đồng bộ nhưng hãy nhớ rằng đây chỉ là chi tiết triển khai. Điều này có thể thay đổi mà không cần thông báo từ phiên bản .NET này sang phiên bản .NET khác. Bạn không bao giờ nên dựa vào nó và không bao giờ sử dụng [ThreadStatic]
trong ASP.NET. Điều này có thể cắn bạn rất nặng.
Nguồn
2012-01-01 22:49:42
Có cách nào dễ dàng để tái tạo hành vi như vậy không? – Rookian
Wow Tôi rất sốc bởi câu trả lời này, tôi thực sự tin rằng ASP.NET MVC đã xử lý mọi yêu cầu cho mỗi chủ đề. Nó vẫn là trường hợp với MVC 5? Làm thế nào để bạn giải thích rằng có thể thiết lập Thread.CurrentThread.CurrentCulture cho ứng dụng đa ngôn ngữ, nếu yêu cầu không được xử lý cho mỗi chủ đề? – reddy
@reddy Theo như tôi biết ASP.NET sẽ quan tâm đến các đối tượng đó (HttpContext, CurrentCulture, ...) và chuyển chúng từ một luồng này sang luồng khác. – Rookian