0

WebJobs SDKは、実行中の関数にホストのシャットダウンを通知するために SDK によって使用される関数への引数の受け渡しをサポートしています。CancellationTokenアプリ/機能が新しいバージョンに置き換えられた場合、実行中の機能が通知されないことに気付きました。これは、関数が長時間実行されるように設計されている場合に問題になります。これは、知らないうちに「古い」ロジックが実行されてしまう可能性があるためです。

たとえば、永久に (またはキャンセルされるまで) 実行される単純な関数を作成する場合:

using System;
using System.Threading;

public static async Task Run(string input, TraceWriter log, CancellationToken token)
{
    while (!token.IsCancellationRequested) 
    {    
        token.ThrowIfCancellationRequested();
        log.Info($"Input: {input}");
        await Task.Delay(2000, token).ConfigureAwait(false);
    }
}

それを実行し、何らかの方法でコードを更新して再デプロイ (Azure Functions ポータルにいる場合は保存) すると、関数は再コンパイルされますが、実行中の関数インスタンスは停止されず、続行されます。手動で無効にするまで、以前のバージョンのコードを実行します。

実行中の関数内で再デプロイを検出する方法はありますか?

4

1 に答える 1