2016-07-08 18 views
7

Tôi đã bắt đầu đọc tài liệu về Hangfire và không tìm thấy gì về giới hạn nhiệm vụ.Giới hạn nhiệm vụ đã lên lịch (hoặc cách triển khai nhiệm vụ bền vững)?

Như đã khai báo, nhiệm vụ (hoặc công việc) được lưu ở đâu đó.

Vì họ chỉ là đại biểu, điều duy nhất có thể được lưu trữ, theo như tôi hiểu, là một đại biểu "cơ thể" (IL?). Nhưng có thể có các bao đóng, cung cấp một số bối cảnh cho công việc, ví dụ: một số dịch vụ bên ngoài, có thể yêu cầu tải thêm cụm để chạy mã của chúng, v.v.

Hangfire xử lý như thế nào?
Tác vụ có thể chứa bất kỳ hướng dẫn nào trong cơ thể hoặc có bất kỳ giới hạn nào không?

Trả lời

1

Khi bạn tạo một công việc, nó gọi Job.FromExpression, nếu bạn chuyển bất kỳ điều gì khác ngoài biểu thức gọi phương thức, nó sẽ đưa ra một ngoại lệ. Vì vậy, điều duy nhất bạn có thể chuyển đến BackgroundJob.Enqueue là một dòng duy nhất mà dòng đó gọi hàm.

Sau đó, nó sẽ tuần tự hóa loại đối tượng và tất cả được chuyển trong tham số vào JSON bằng cách sử dụng JobHelper.ToJson. Khi bạn vượt qua trong một thể hiện của một lớp thể hiện không được tuần tự hóa, chỉ có kiểu là, nếu thực thi vượt qua các ranh giới quá trình, nó sẽ mất trạng thái bên trong.

Bạn có thể muốn đọc lên trên bài viết blog trên trang blog hangfire cũ "Are your methods ready to run in background?"

+0

Cảm ơn bạn đã trả lời và tham khảo bài viết! Tôi nghĩ rằng, tôi đã có lời giải thích của tôi, và kết luận là các phương thức công việc/nhiệm vụ rất * bị giới hạn bởi nội dung của chúng. Người ta cần phải vượt qua ** tất cả ** nhà nước, cần thiết để thực hiện công việc. Nếu một người cần một số trạng thái động, anh ta phải lấy nó từ trạng thái, đã được tuần tự hóa trên lịch trình công việc (ví dụ, chuyển mã nhận dạng bản ghi trong cơ sở dữ liệu hoặc tên/đường dẫn tệp). Tôi thất vọng một chút - đây là những điều rất quan trọng, phải được đặt trên đầu trang của Hangfire. – Dennis

0

Có vẻ như cơ chế được dựa trên Expression để lập lịch biểu hoạt động và thư viện được thiết kế để thực hiện "nội bộ" (trong quá trình) chủ yếu trong các trang web ASP.Net.

Có nghĩa là tất cả các cụm cần thiết để thực hiện tác vụ được lên lịch phải được tải vào không gian bộ nhớ ứng dụng web, vì chúng cần thiết để lên lịch công việc (ứng dụng sẽ không biên dịch nếu thiếu Type từ một hội đồng không được tham chiếu).

Hy vọng nó sẽ giúp mọi việc trở nên rõ ràng hơn một chút!

+0

"ứng dụng sẽ không được biên dịch nếu nó đã mất tích một loại từ một hội đồng mà không được tham chiếu" - Tôi có nghĩa là tải lắp ráp động, ví dụ một số kịch bản dựa trên plugin, khi hội đồng plugin chính xác không xác định tại thời gian biên dịch. – Dennis

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