Tôi hiểu rằng trong dịch vụ Windows, tốt hơn nên sử dụng Timer
thay vì Thread.Sleep(timeout)
. Tuy nhiên, trong tất cả các ví dụ mã tôi có thể tìm thấy trên Internet đã xử lý công nhân Azure, nó là Thread.Sleep(timeout)
được sử dụng thay vì Timer
.Sử dụng Thread.Sleep hoặc Timer trong vai trò nhân viên Azure trong .NET?
Ngay cả những mã mặc định được cung cấp trong mẫu dự án Worker trong Visual Studio sử dụng một Thread.Sleep
:
public class WorkerRole : RoleEntryPoint
{
public override void Run()
{
// This is a sample worker implementation. Replace with your logic.
Trace.WriteLine("$projectname$ entry point called", "Information");
while (true)
{
Thread.Sleep(10000);
Trace.WriteLine("Working", "Information");
}
}
// ...
}
Cho đến nay, tôi đã được sử dụng cũng Thread.Sleep
ở công nhân của tôi, nhưng mà không thực sự hiểu tại sao. Vì vậy, câu hỏi của tôi là, tại sao sử dụng Thread.Sleep(timeout)
trong vai trò người lao động Azure thay vì Timer
? Sự khác nhau giữa dịch vụ Windows và nhân viên Azure dẫn đến sự khác biệt này trong cách chúng ta được cho là thụ thai loại ứng dụng này là gì? Có tốt hay xấu khi sử dụng Timer
trong công nhân Azure?
Bất kỳ lời giải thích nào có liên kết đến một số tài nguyên giải thích nguyên tắc cơ bản của điều này đều được chào đón vì tôi không thể tìm thấy bất kỳ điều gì cho đến thời điểm này.
Đây không thực sự là câu hỏi cụ thể cho Windows Azure. Có một [câu trả lời tuyệt vời của StackOverflow] (http://stackoverflow.com/questions/2822441/system-timers-timer-threading-timer-vs-thread-with-whileloop-thread-sleep-for) có một chút chi tiết về các bộ tính giờ khác nhau. Điều này cũng áp dụng cho các máy ảo Windows Azure, vì chúng là các máy ảo Windows Server 2008. –
Cảm ơn bạn đã liên kết. Thật thú vị nhưng tôi không cảm thấy nó thực sự trả lời câu hỏi của tôi. Tôi hiểu Windows Azure là máy ảo nhưng nếu nó là _just_ VM, tại sao không chỉ sử dụng Windows Services? Trong trường hợp đó, câu hỏi của tôi sẽ không cần thiết. – Guillaume
Ah ... Vâng, bạn chắc chắn có thể sử dụng Windows Services. Tuy nhiên, để sử dụng Dịch vụ Windows trong Windows Azure, bạn sẽ cần thực hiện một số công việc. Đây là [bài đăng blog] (http://blogs.msdn.com/b/mwasham/archive/2011/03/30/migrating-a-windows-service-to-windows-azure.aspx) cho biết những gì có liên quan. Nó đơn giản hơn nhiều để chạy mã của bạn trong các sự kiện được cung cấp bởi Windows Azure Worker hoặc Web Role. Xem [trả lời về điều này] của tôi (http://serverfault.com/a/365054/99269) trên ServerFault là tốt. –