2011-11-22 29 views
8

Bất cứ khi nào vai trò Windows Azure bị dừng, phương thức OnStop() được gọi. Hóa ra rằng có RoleEnvironment.Stopping event được kích hoạt trước khi OnStop() được gọi. MSDN cho biết sự kiện này là nơi thích hợp cho vai trò tắt mã sạch.Sự khác biệt giữa phương thức OnStop() và sự kiện Dừng trong vai trò Windows Azure là gì?

Sự khác nhau giữa hai loại là gì? Tại sao tôi phải đặt mã tắt máy sạch vai trò trong sự kiện Stopping chứ không phải trong ghi đè phương thức OnStop()?

Trả lời

2

Sự kiện cho phép người đăng ký khác trong các lớp khác thực hiện một số hành động, trong khi phương pháp cho phép tác giả lớp con như bạn đặt nó trong lớp thực tế và (ví dụ) sửa đổi sự kiện nào được nâng lên.

1

Brent Stineman (Windows Azure MVP) gần đây blogged về RoleEntryPoint và trình tự bắt đầu/chạy/dừng liên quan và mô tả cả Ngừng và OnStop trong mô tả trình tự.

+1

Vâng, ông nói rằng sự kiện này được kích hoạt trước khi 'OnStop()' được gọi. Tôi không thấy bất cứ điều gì ngoài điều đó trong bài viết đó. – sharptooth

+4

Như tôi đã hiểu, và thừa nhận rằng tôi chưa tập trung vào việc kiểm tra điều này, Stopping là cảnh báo đầu tiên của bạn để dọn dẹp. Vì vậy, tại thời điểm này bạn có thể ngừng tham gia vào nhiều công việc hơn (kéo từ hàng đợi, tắt trình nghe điểm cuối nội bộ của bạn). Nó cũng là một sự kiện không đồng bộ. OnStop là nỗ lực cuối cùng của bạn để dừng lại và bạn chỉ có 5 phút để hành động và được gọi trực tiếp bởi tác nhân Azure Fabric. Tất cả điều này không cần phải thăm dò nhiều hơn nhưng chỉ đơn giản là không cao trong danh sách ưu tiên của tôi. Nó thậm chí có thể là hai mục này chạy trong các ngữ cảnh bảo mật khác nhau. – BrentDaCodeMonkey

4

Bên cạnh thực tế là cơ chế sự kiện cung cấp một cách linh hoạt để đính kèm xử lý, trong khi các phương pháp OnStop phải được xác định trực tiếp trên lớp có nguồn gốc từ RoleEntryPoint, một sự khác biệt có liên quan là thế này:

The Stopping event is not raised when the virtual machine of the role 
instance is rebooted. 

Vì vậy, các sự kiện dừng sẽ không được nâng lên, ví dụ, khi VM được khởi động lại để nâng cấp hệ điều hành khách.

khác biệt nữa là:

Code running in the OnStop method has 5 minutes to finish when it is called 
for reasons other than a user-initiated shutdown. 

Trong khi không có đề cập đến trong tài liệu rằng sự kiện Dừng có một giới hạn như vậy.

Nguồn:

+0

Nếu bạn nhìn vào các bản ghi quy trình Azure, bạn sẽ thấy rằng giới hạn 5 phút là cho toàn bộ chuỗi dừng, vì vậy đó chỉ là MSDN hơi sai. – sharptooth

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