2011-12-06 39 views
8

Tôi đang phát triển một ứng dụng .NET 4 yêu cầu một chuỗi công việc phụ trợ để chạy. Chủ đề này bao gồm phần lớn mã sau:Quá trình nền dài chạy trong ASP.NET - Application_Start hoặc quá trình riêng biệt?

while (true) { 
    //Check stuff in database 
    //Do stuff 
    //write to database/filesystem 
    Thread.sleep(60000) 
} 

Ứng dụng ASP.NET chỉ là giao diện người dùng cho cơ sở dữ liệu.

Câu hỏi của tôi là xung quanh nơi tốt nhất để đặt vòng lặp công nhân này. Có vẻ như hai lựa chọn trước mắt của tôi sẽ là (1) để tách nó ra khỏi phương thức Application_Start, và chỉ để cho nó chạy, hoặc (2) gói nó trong một quy trình riêng biệt (dịch vụ Windows?)

(1) cần một số logic trong mã ASP.NET để kiểm tra nó vẫn đang chạy, như IIS có thể giết nó. Nó cũng khá gọn gàng trong đó toàn bộ logic ứng dụng là một, dễ dàng triển khai gói. (2) được tách biệt nhiều hơn, nhưng cảm thấy lộn xộn hơn rất nhiều.

Cách tiếp cận tốt nhất là gì?

+0

có thể trùng lặp với [ASP.NET và chuỗi chạy dài - cách chúng kết hợp?] (Http://stackoverflow.com/questions/323693/asp-net-and-long-running-background-threads-how -do-them-mix) – jrummell

Trả lời

13

Tôi sẽ chọn không tham gia Dịch vụ Windows nếu có thể. Luồng nền trong ASP.NET comes with a lot of baggage.

  1. Tuổi thọ của quá trình nền của bạn là lòng thương xót của IIS. Nếu IIS quyết định thời gian của nó để tái chế App Pool, quá trình nền của bạn sẽ khởi động lại. Nếu IIS quyết định dừng App Pool do không hoạt động, quá trình nền của bạn sẽ không chạy.
  2. Nếu IIS được định cấu hình để chạy dưới dạng Web Garden (nhiều quy trình cho mỗi AppPool), thì chuỗi nền của bạn có thể chạy nhiều lần.
  3. Sau đó, nếu bạn quyết định tải cân bằng trang web của mình (nhiều máy chủ đang chạy trang web), thì bạn có thể phải thay đổi ứng dụng của mình để đảm bảo luồng nền chỉ xảy ra trên một máy chủ).

Và còn hơn thế nữa.

+0

"Hành lý" đã được đưa về chăm sóc cho bạn với các công cụ như [Hangfire] (http://hangfire.io/) - xử lý nền hiện rất mạnh mẽ. [Hãy xem xét những điểm này] (http://stackoverflow.com/a/41734936/56145). –

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