Chúng tôi đang xử lý một vấn đề thú vị trên StackOverflow.
Chúng tôi đã có một loạt các nhiệm vụ "cần phải hoàn thành sớm". Một ví dụ đang cập nhật danh sách "Câu hỏi liên quan". Những gì chúng ta đã làm trong quá khứ là cõng những nhiệm vụ đó lên tải trang của một số người dùng.
Điều này không bao giờ lý tưởng, nhưng nó không thực sự đáng chú ý. Bây giờ SO đã vượt qua mốc 1.000.000 câu hỏi, những người dùng không may mắn đó đang bắt đầu cảm thấy nó.
Giải pháp tự nhiên là thực sự đẩy những nhiệm vụ này vào nền. Có hai cách rộng rãi để làm điều này tôi đang xem xét.
1. Trong IIS dưới dạng một luồng chủ đề / nhóm công việc tùy chỉnh
Về cơ bản, chúng tôi tạo ra một số chủ đề (không phải ThreadPool , để không can thiệp vào IIS) và cung cấp cho họ các dịch vụ mà một số bộ sưu tập chúng tôi đang đưa Func vào.
Các pro lớn ở đây là sự đơn giản. Chúng tôi không phải lo lắng về việc sắp xếp bất cứ điều gì, chúng tôi cũng không phải đảm bảo rằng một số dịch vụ bên ngoài đã hoạt động và đáp ứng.
Chúng tôi cũng có quyền truy cập vào tất cả các mã phổ biến của chúng tôi.
Con lừa, tốt, chúng ta không nên sử dụng chủ đề nền. Tất cả những phản đối mà tôi biết đều tập trung vào việc bỏ đói IIS (nếu bạn sử dụng ThreadPool) và các luồng bị chết ngẫu nhiên (do tái chế AppPool).
Về cơ bản, chúng tôi đã có cơ sở hạ tầng để biến cái chết của luồng ngẫu nhiên thành một vấn đề (về cơ bản có thể phát hiện một nhiệm vụ đã bị bỏ rơi) và việc giới hạn số lượng luồng (và sử dụng các luồng không phải ThreadPool) cũng không khó.
Đã chuyển sang StackOverflow , vì nó không thực sự được giải quyết ở đây.
2. Là một dịch vụ
Hoặc một số giải pháp của bên thứ ba, hoặc một giải pháp tùy chỉnh.
Về cơ bản, chúng tôi sắp xếp một nhiệm vụ xuyên qua ranh giới quy trình cho một số dịch vụ và chỉ cần quên nó đi. Có lẽ chúng tôi đang liên kết một số mã trong hoặc bị hạn chế đối với SQL thô + chuỗi kết nối.
Chuyên nghiệp là "cách đúng đắn" để làm điều này.
Nhược điểm là chúng tôi hoặc rất hạn chế trong những gì chúng tôi có thể làm hoặc chúng tôi sẽ phải tìm ra một số hệ thống để giữ dịch vụ này đồng bộ với cơ sở mã của chúng tôi. Chúng tôi cũng cần phải kết nối tất cả các hoạt động theo dõi và đăng nhập lỗi của chúng tôi bằng cách nào đó mà chúng tôi nhận được miễn phí với tùy chọn "Trong IIS".
Có bất kỳ lợi ích hoặc vấn đề khác với cách tiếp cận dịch vụ?
Tóm lại, có những vấn đề chưa được giải quyết và không thể khắc phục được khiến cho cách tiếp cận số 1 không khả thi và nếu có thì có dịch vụ bên thứ ba nào tốt mà chúng ta nên xem xét cho cách tiếp cận số 2 không?