2017-03-28 57 views
0

同じコードを共有するいくつかのAzure関数があります。だから私は私のライブラリを公開するためのバッチファイルを作成しました。シンプルなバットファイルです。私の紺色の機能ごとに、それはホストに接続し、robocopyを使ってフォルダを同期させます。Azure-Function Deploymentは実行中のプロセスを強制終了します。回避できますか?

ただし、公開するたびに、現在実行中の機能は削除されます。私はそれを避けたい。実行中の機能が自然に作業を終了させる方法はありますか?

私が公開すると、実際に動作しているdllを書き換えないので、私は可能だと思いますが、<azure-function-url>/site/wwwrootフォルダにファイルをコピーします。

注: この関数は、待機することなく非同期メソッドを呼び出します。 asyncメソッドは、ソースが変更されたときに作業を完了しません。 (この問題に焦点を当てていない、感謝のマットコメントのために私の目を開きます)

+0

現在実行中の機能が削除されていると思いますか?関数のランタイムは、ホストの再起動時に関数が正常に終了できるように設計されています。https://github.com/Azure/azure-webjobs-sdk-script/blob/661e8de8449865139d20fe019f789a65cfe5da33/src/WebJobs.Script/Host/ScriptHostManagerを参照してください。 .cs#L160 –

+0

この関数は、待機することなく非同期メソッドを呼び出します。 asyncメソッドは、ソースが変更されたときに作業を完了しません。 (今私は質問に追加する) –

答えて

1

関数のランタイムは、ホストの再起動の際に機能を正常に終了できるように設計されています。hereを参照してください。

非同期呼び出しを待っているのは、関数の反パターンです。関数の実行を追跡することはできません。返されたTaskを使用して、いつ機能が終了したかを判断します。 Taskを返さない場合は、返された時点で関数が完了したものとみなします。

あなたの場合は、孤立した非同期呼び出しが実行されている間、再起動時にホストを強制終了します。あなたは非同期呼び出しを待つために失敗した場合、我々はまた、成功を保証するものではありません。

  • ログ
  • 出力バインディング
  • 例外処理

ドゥ:static async Task Run(...){ await asyncMethod(); }

をしないでください。 static void Run(...){ asyncMethod(); }

+0

すべてクリア、タイマット私は私の関数を変更しています私の牙を実行する上で待って、私はまた、パターンの方法で返すために私のコードの少しのロジックを変更する必要があります!ありがとうございました –

+1

待望の非同期呼び出しで請求がどのように機能するのか不思議です。クイックリターンを支払うか、フルタスクの実行時間を支払うか? – Mikhail

+0

クイックリターン。しかし、待たれていない非同期呼び出しには、上記の警告が付いており、閉鎖される可能性のある抜け穴です。 –

関連する問題