私は、WindowsサービスではThread.Sleep(timeout)
ではなくTimer
を使用する方がよいことを理解しています。しかし、すべてのコード例で、私はAzureのワーカーを扱っていたインターネット上に見つけることができました。の代わりにThread.Sleep(timeout)
が使用されています。 Visual Studioで労働者のプロジェクトテンプレートで提供.NETのAzureワーカーロールでThread.SleepまたはTimerを使用していますか?
でもデフォルトのコードが使用しています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");
}
}
// ...
}
これまでのところ、私はまた私の労働者ではなく、本当に、なぜ理解せずThread.Sleep
を使用してきました。だから私の質問は、なぜTimer
ではなく、AzureワーカーのロールでThread.Sleep(timeout)
を使用していますか? WindowsサービスとAzureワーカーの違いは、このようなアプリケーションの考え方の違いにつながります。 Azureの労働者にTimer
を使用するのは良いか悪いですか?
これまでのところ何も見つかりませんでしたので、これの基礎を説明するリソースへのリンクは、歓迎しています。
これは実際にWindows Azure固有の質問ではありません。かなりのものになる[偉大なStackOverflow答え](http://stackoverflow.com/questions/2822441/system-timers-timer-threading-timer-vs-thread-with-whileloop-thread-sleep-for)さまざまなタイマーについて詳しく説明します。これはWindows Azure VMにも当てはまります。なぜなら、Windows Azure VMはWindows Server 2008 VMだからです。 –
リンクをありがとう。面白いですが、私の質問に本当に答える気がしません。私はWindows AzureもVMだと理解していますが、それが_just_ VMだったのであれば、単にWindowsサービスを使用してみませんか?その場合、私の質問は、必要ではないでしょう。 – Guillaume
ああ...まあ、あなたは確かにWindowsサービスを使用することができます。ただし、Windows AzureでWindowsサービスを使用するには、いくつかの作業が必要です。ここには何が関係しているかを示す[ブログ記事](http://blogs.msdn.com/b/mwasham/archive/2011/03/30/migrating-a-windows-service-to-windows-azure.aspx)があります。 Windows Azure WorkerまたはWeb Roleによって提供されるイベント内でコードを実行する方がはるかに簡単です。私の[これについての回答](http://serverfault.com/a/365054/99269)もServerFaultでご覧ください。 –