Capisco che in un servizio di Windows, è meglio utilizzare Timer
anziché Thread.Sleep(timeout)
. Tuttavia, in tutti gli esempi di codice che è possibile trovare su Internet che gestiscono i lavoratori di Azure, è Thread.Sleep(timeout)
che viene utilizzato al posto di Timer
.Utilizzo di Thread.Sleep o Timer nel ruolo di lavoro di Azure in .NET?
Anche il codice di default fornito nel modello di progetto Lavoratore in Visual Studio utilizza un 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");
}
}
// ...
}
Finora, ho anche utilizzando Thread.Sleep
nei miei lavoratori, ma senza realmente capire il perché. Quindi la mia domanda è: perché utilizzare Thread.Sleep(timeout)
nel ruolo di lavoro di Azure anziché Timer
? Qual è la differenza tra il servizio Windows e il lavoratore di Azure che porta a questa differenza nel modo in cui dovremmo concepire questo tipo di applicazione? È utile o meno usare Timer
nei lavoratori di Azure?
Qualsiasi spiegazione con collegamenti ad alcune risorse che spiegano i fondamenti di questo è la benvenuta in quanto non ho trovato nulla finora.
Questa non è una domanda specifica di Windows Azure. C'è una [ottima risposta StackOverflow] (http://stackoverflow.com/questions/2822441/system-timers-timer-threading-tims-vs-thread-with-whileloop-thread-sleep-for) che va un bel po ' di dettagli sui diversi timer. Questo vale anche per le macchine virtuali Windows Azure, dal momento che sono VM di Windows Server 2008. –
Grazie per il link. È interessante ma non mi sembra che risponda davvero alla mia domanda. Capisco che Windows Azure sia anche VM, ma se fosse _just_ VM, perché non usare solo i servizi di Windows? In tal caso, la mia domanda non sarebbe necessaria. – Guillaume
Ah ... Beh, puoi certamente usare i servizi di Windows. Tuttavia, per utilizzare un servizio Windows in Windows Azure, è necessario lavorare. Ecco un [post di blog] (http://blogs.msdn.com/b/mwasham/archive/2011/03/30/migrating-a-windows-service-to-windows-azure.aspx) che mostra cosa è coinvolto. È molto più semplice eseguire il codice all'interno degli eventi forniti da un Windows Azure Worker o da un ruolo Web. Vedere anche la mia [risposta a questo] (http://serverfault.com/a/365054/99269) su ServerFault. –