Azure WebJobs SDK をいじって、インスタンスで関数をトリガーすると、関数にCallAsync()
渡さJobHost
れたインスタンスTextWriter
とCancellationToken
インスタンスがすぐに破棄され、キャンセル状態のログと監視には役に立たなくなります。
デバッグのために、コードをコンソール アプリとして実行します。Main() 内のコードは次のようになります。
_host = new JobHost();
_host.StartAsync().Wait();
_host.CallAsync(typeof(Functions).GetMethod("ProcessAggregationsAsync"));
Console.ReadKey();
関数は次のとおりです(ロジックなし):
[NoAutomaticTrigger]
public static async void ProcessAggregationsAsync([Table("table1")] CloudTable tbl, TextWriter log, CancellationToken cancelToken)
{
log.WriteLine("Hello");
...
log.WriteLine("Hello 2"); // --> log is disposed
}
関数ProcessAggregationsAsync()
には、いくつかのロジック (Azure テーブルの監視といくつかのデータの処理) を実行し、正常に動作する無限ループがあります。問題は、キャンセルトークンをチェックするコードを追加するか、提供されたログ (TextWriter) にいくつかの特性をログに記録するときに発生します。すぐにはログに 2 つのエントリが書き込まれますが (Azure テーブル "azure-webjobs-hosts")、失敗します。
何が間違っている可能性がありますか?それらのオブジェクトが破棄されるのはなぜですか?