web-dev-qa-db-ja.com

タイマートリガー付きの継続的なWebJob

私は継続的なWebジョブで次の関数を作成しました:

public static void fun1([TimerTrigger("24:00:00", RunOnStartup = true, UseMonitor = true)] TimerInfo timerInfo, TextWriter log)
{//Code}

public static void fun2([TimerTrigger("00:01:00", RunOnStartup = true, UseMonitor = true)] TimerInfo timerInfo, TextWriter log)
{//code}

ここで、fun1は再度呼び出されず(Webジョブの開始後に1回のみ)、fun2はすべてのプロセスが完了した後に1分のトリガーで呼び出されます。

誰かが理由を説明できますか?私は何か間違ったことをしていますか?

11
Priyanka Mane

TimerTriggerAttribute のドキュメントをご覧ください。

  • 指定した最初のパラメーターはスケジュール式です。これは、6フィールドのcrontab式またはSystem.TimeSpanのいずれかです。

Cron式は、次のように表すことができます。

*    *    *    *    *    *  command to be executed
┬    ┬    ┬    ┬    ┬    ┬
│    │    │    │    │    │
│    │    │    │    │    │
│    │    │    │    │    └───── day of week (0 - 7) (0 or 7 are Sunday, or    use names)
│    │    │    │    └────────── month (1 - 12)
│    │    │    └─────────────── day of month (1 - 31)
│    |    └──────────────────── hour (0 - 23)
│    └───────────────────────── min (0 - 59)
└────────────────────────────── second(0 - 59)

あなたの場合、式はTimeSpanを表す文字列です:

  • "24:00:00":このジョブは24時間ごとに実行されます、RunOnStartup:これは、最後の実行が過去24時間に発生した場合でも、Webジョブの開始時または再開時にジョブが実行されることを意味します。

  • "00:01:00":このジョブは毎分実行されます。RunOnStartup:これは、最後の実行が最後の1分間に発生した場合でも、Webジョブの開始時または再開時にジョブが実行されることを意味します。

[〜#〜]編集[〜#〜]

この答えから:

これは、TimeSpan.Parseの動作方法によるものです。奇妙なことに「24:00:00」を渡すと、24日間のTimeSpanが返されます。これが彼らの意図した振る舞いなのか、彼らの側のバグなのかはわかりませんが、私たちは単に表現を彼らに伝え、彼らの振る舞いを継承します。とにかく、あなたの目的のために、あなたは「1.00:00」(1日を指定する)を使うことができます。

34
Thomas