JobHost.CallAsync() 并处置 TextWriter

JobHost.CallAsync() and disposed TextWriter

使用 Azure WebJobs SDK,当我在 JobHost 实例上使用 CallAsync() 触发我的函数时,传递到我的函数中的 TextWriterCancellationToken 实例被处置一秒钟,这使得它无法记录和监视取消状态。

为了调试,我 运行 我的代码作为控制台应用程序。 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 tables 并处理一些数据)并且工作正常。当我添加代码以检查取消令牌或将某些特征记录到提供的日志 (TextWriter) 中时,问题就开始了。不是立即,它将 2 个条目写入日志 (azure table "azure-webjobs-hosts") 但随后失败。

有什么问题吗?为什么要处理这些对象?

糟糕,刚刚注意到函数签名中的明显错误 - 应该有 Task 而不是 void (public static async Task ProcessAggregationsAsync(...))。

呵呵。为什么我在不得不 post 之前没有看到它? :(