2017-10-04 12 views
9

timer triggersを使用してスケジュールで実行するC#Azure関数がいくつかあります。開発中タイマートリガAzure関数を一度ローカルで実行する最も簡単な方法は何ですか?

public static void Run([TimerTrigger("%TimerSchedule%")]TimerInfo myTimer, TraceWriter log) 

、私は多くの場合、Visual Studioの+ Azureの機能コアのAzureの機能ツールを使用してローカルの機能を実行したい:私は%TimerSchedule%アプリの設定でのcron式を指し、そのようにそれらを設定しましたツール。しかし、私がF5を押してローカルに関数をデバッグすると、(通常は)即座に実行されません。代わりに、タイマースケジュールに従って次の発生を待機します。たとえば、私のcronの式が毎日午後8時に実行されているとすると、関数が実際にマシン上で実行されるまで8PMまで待たなければなりません。

だから、私の質問は:は一度ローカルに実行機能を作るための最も簡単かつ最良の方法は何ですか?

物事私が試したかと考えています

  1. 使用だけで地域の発展のために、より頻繁にタイマースケジュール
    • これはOKが、完璧ではない - あなたはまだそれがでない限り少し待たなければなりません非常に頻繁に実行され、頻繁に実行される場合は、関数が複数回実行される可能性があります。これは私が今やっていることです。私は意外に見つけた -
  2. は直接あなたがRun()TimerInfoTraceWriter引数を提供する必要があるためこれは100%簡単ではありません
    • 機能のRun()メソッドを呼び出すコンソールアプリケーションやユニットテストを書きますそのための小さなドキュメント。

MicrosoftのStrategies for testing your code in Azure Functionsページには、このトピックに非常に有用ではありません - それだけでトリガタイプをテストする方法として、タイマートリガーを言及しています。

完璧な世界では、私は、F5キーを打つと思いますし、機能はすぐに一度実行します - ちょうど「通常の」.NETアプリを開発してよう。 hereを文書として

答えて

12

あなたはおそらくRunOnStartupフラグを使用することができます。それは一度しか実行されていないというあなたの要点にはまったく合致しませんが、アプリが起動したら少なくともローカルで実行する必要があります。

/// Gets or sets a value indicating whether the function should be invoked 
/// immediately on startup. After the initial startup run, the function will 
/// be run on schedule thereafter. 

結合属性を使用した例:

[TimerTrigger("%TimerSchedule%", RunOnStartup = true)]TimerInfo myTimer

+0

私は機能を展開するたびに、これはまた、一度、クラウド内の関数を実行するだろうと考え、正しいですか? [このコメント](https://stackoverflow.com/a/44573176/854694)ははいと思われるようです。 これは正しい方向への大きな一歩ですが、「生産」の動作を変更したくない場合は、展開する前に元に戻す必要があります。 –

+2

@ripley_はい、私はあなたが正しいと信じています。[TimerSchedule]のバインド方法と同様に、ブール値を設定内の変数にバインドすることもできます。そこから、ローカル開発をtrueに設定し、実働環境(またはその他の環境)をfalseに設定することができます。 –

関連する問題