2011-11-16 32 views
5

Khi gọi BeginInvoke trên một đại biểu, hành động được thực thi trên một luồng riêng biệt. Nếu được gọi trong ASP.NET hiện nó sử dụng một thread CLR công nhân? Hay nó sử dụng một chuỗi công nhân IIS?sử dụng các đại biểu trong ASP.NET để xử lý các hoạt động không đồng bộ

Nếu sau này, tôi sẽ cần phải sử dụng một mẫu ASP.NET không đồng bộ để đảm bảo hành động được thực hiện trên một chuỗi công nhân CLR. Nhưng tôi không muốn làm điều đó nếu hành động kết thúc ở đó khi BeginInvoke.

Trả lời

6

nó sử dụng chuỗi công việc CLR.

như mô tả trong here

Để bắt đầu, ASP.NET sử dụng quá trình toàn chủ đề CLR hồ bơi để yêu cầu dịch vụ (đối với nền thêm về các hồ bơi thread CLR, xem cột NET trong vấn đề này).

EDIT:

tài nguyên khác là this blog

Thật không may, sợi chỉ được sử dụng bởi BeginInvoke là thực sự lấy từ cùng một công nhân bơi thread được sử dụng bởi ASP.Net để xử lý yêu cầu trang

+0

Cảm ơn. MVC hỗ trợ một mô hình không đồng bộ. Nó xuất hiện nếu tôi tận dụng điều đó cùng với kỹ thuật BeginInvoke, trang của tôi sẽ trở lại nhanh chóng và công việc sẽ không mất một chuỗi công nhân IIS. Chính xác? –

+0

Đọc lại bài đăng trên blog, tôi chỉ cần thực hiện một kỹ thuật Thread.Start(). Đối với ứng dụng của tôi, tôi sẽ không có nguy cơ nhiều hơn một số bất kỳ các quá trình này xảy ra tại một thời điểm (thường là chỉ 1), do đó, nó có lẽ là giải pháp dễ nhất/dễ bảo trì nhất tại thời điểm này cho nhu cầu của tôi. Đối với bất cứ ai sau cùng tìm kiếm các bài đăng blog cho cụm từ "Tốt. Tôi sẽ chỉ sử dụng Thread.Start() và tạo chủ đề của riêng tôi". –

+0

@ John Yea bạn nói đúng. nếu bạn chỉ muốn trả lại trang nhanh, mà không cần người dùng biết về kết quả, thì tốt. nhưng nó sẽ không cải thiện hiệu suất. – Mithir

1

Chủ đề sử dụng/quản lý hơi khác một chút trong IIS6, IIS7 và IIS 7.5.

Khá chi tiết và cập nhật lời giải thích ở đây:

ASP.NET Thread Usage on IIS 7.5, IIS 7.0, and IIS 6.0

Không chắc nếu điều này trả lời câu hỏi của bạn, nhưng một tốt đọc anyways.

1

Sử dụng đại biểu tùy chỉnh và gọi phương thức BeginInvoke của nó cung cấp cách nhanh chóng để kích hoạt chuỗi công việc cho ứng dụng của bạn. Nhưng thật không may, chúng làm tổn thương hiệu suất tổng thể của ứng dụng của bạn vì chúng tiêu thụ các luồng từ cùng một nhóm được ASP.NET sử dụng để xử lý các yêu cầu HTTP. Chỉ cần nhớ quá, nếu gọi lại từ phương pháp không đồng bộ là quan trọng thì bạn cần chặn luồng chính trở về máy khách cho đến khi quá trình không đồng bộ hoàn tất. Nếu việc ghi nhật ký và phân tích là một cuộc gọi phương pháp 'cháy và quên', thì mọi thứ trở nên dễ dàng hơn và bạn có thể chỉ cần kích hoạt phương thức và cho phép máy chủ phản hồi ứng dụng khách. Tuy nhiên, nếu gọi lại là quan trọng và máy chủ đã hoàn tất xử lý, không có gì đang xảy ra trên máy chủ để xử lý cuộc gọi lại khi hoàn thành; đây là nơi xử lý không đồng bộ trên máy chủ cho các ứng dụng ASP.NET khác với một ứng dụng WinForms.

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