Rozumiem, że w usłudze Windows lepiej jest używać Timer
niż Thread.Sleep(timeout)
. Jednak we wszystkich przykładach kodu, które mogłem znaleźć w Internecie, który obsługiwał pracowników Azure, jest to Thread.Sleep(timeout)
, które jest używane zamiast Timer
.Korzystanie z Thread.Sleep lub Timer w roli robotów Azure w .NET?
Nawet domyślny kod podany w szablonie projektu Pracownik w Visual Studio używa 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");
}
}
// ...
}
Dotychczas byłem również używając Thread.Sleep
w moich pracowników, ale nie rozumiejąc dlaczego. Moje pytanie brzmi: dlaczego używać Thread.Sleep(timeout)
w roli robota Azure zamiast Timer
? Jaka jest różnica między usługą Windows a robotami platformy Azure, która prowadzi do tej różnicy w sposobie, w jaki powinniśmy wyobrazić sobie taką aplikację? Czy korzystanie z Timer
w usłudze Azure jest dobre czy złe?
Wszelkie wyjaśnienia z linkami do niektórych zasobów wyjaśniających podstawy tego są mile widziane, ponieważ nie udało mi się znaleźć niczego na razie.
To naprawdę nie jest pytanie specyficzne dla Windows Azure. Istnieje [świetna odpowiedź StackOverflow] (http://stackoverflow.com/questions/2822441/system-timers-timer-threading-timer-vs-thread-with-whileloop-thread-sleep-for), która idzie w całkiem sporo szczegółów na temat różnych timerów. Dotyczy to również maszyn wirtualnych systemu Windows Azure, ponieważ są to maszyny wirtualne z systemem Windows Server 2008. –
Dzięki za link. To interesujące, ale nie mam wrażenia, że to naprawdę odpowiada na moje pytanie. Rozumiem, że Windows Azure to również maszyny wirtualne, ale jeśli to była VM, to dlaczego nie korzystać z usług Windows? W takim przypadku moje pytanie nie musiałoby być takie. – Guillaume
Ah ... Cóż, możesz oczywiście korzystać z usług Windows. Aby jednak korzystać z usługi systemu Windows w systemie Windows Azure, należy wykonać pewne czynności. Oto [blog] (http://blogs.msdn.com/b/mwasham/archive/2011/03/30/migrating-a-windows-service-to-windows-azure.aspx) pokazujący, o co chodzi. O wiele łatwiej jest uruchomić kod w ramach zdarzeń dostarczanych przez pracownika Windows Azure lub rolę sieci Web. Zobacz moją [odpowiedź na ten temat] (http://serverfault.com/a/365054/99269) również na ServerFault. –