9

毎日午後 12 時にタスクを実行する単純な Azure Worker ロールを実行しています。以下は、これを実現するコードです。

public override void Run()
{
    try
    {
        while (true)
        {
              int time = Convert.ToInt32(DateTime.Now.TimeOfDay);
              if (time == 12)
              {
                   DoSomethingElse();
              }
        }

    }
    catch (Exception ex)
    {
        Log.Add(ex, true);
    }            
}

DoSomethingElse()これは、毎日午後 12 時にメールを送信する方法で、1 日に 1 回だけ起動します。

時刻が午後 12 時に起動して実行するスケジューラを実装するにはどうすればよいですかDoSomethingElse()

私の質問は次のとおりです:これ(上記のコード)が最良の方法ですか、それともサードパーティのツールを使用しますか?

4

4 に答える 4

5

これに対処する他の質問がいくつかあります (上記の 1 つにマークを付けました)。そうは言っても、他の回答がすでに述べていることを繰り返すリスクがあります:

あなたの場合、正午まで表示されないように時間を遅らせた Windows Azure Queue の単純なメッセージが機能します。これは、複数インスタンスのシナリオに対処するのにも役立ちます。ロールの 2 つのインスタンスを実行している場合、同じスケジュールされたタスクを 2 回実行したくないため、これらのインスタンスの 1 つだけでこのコードを実行する方法が必要です。これは、キュー メッセージを介して簡単に処理できます。または、ブロブ リース (書き込みロックが 1 つしかない場合があります) のようなものをミューテックスとして使用して、単一のインスタンスでスケジューラ コードを実行することもできます。これについては、@smarx のブログ投稿 (こちら) で説明されています。

于 2012-06-05T12:50:37.593 に答える
1

上記の BLOB リースを使用してQuartz.Net http://quartznet.sourceforge.net/を使用することもでき ます。これは、インスタンスの 1 つだけがタスクをホストしていることを確認する優れた方法です。

Quartz.Net を使用して Windows Azure Worker ロールでジョブをスケジュールする

于 2013-01-20T19:00:51.887 に答える
0

Azure タスク スケジューラを使用します。Scott Gu による素敵なチュートリアルはこちら.

具体的には、ストレージ キュー アクション タイプを見ていきます。Worker ロールでキュー イベントに登録するだけです。

(1 時間ごとよりも頻繁にタスクをスケジュールする場合、このサービスには費用がかかる場合があることに注意してください。)

于 2015-05-06T18:20:06.407 に答える
0

Cloud Scheduler は、特にクラウドでのタスク スケジューリングを扱います。

私はこれに出くわしたばかりなので、試していません。

http://getcloudscheduler.com/

更新: クラウド スケジューラは忘れてください。毎日のスケジュールを 600 回連続して実行した結果、600 通の電子メールがクライアントに送信されました。使用しないでください!!!

于 2014-07-28T01:59:31.523 に答える