【问题标题】:JobHost.CallAsync() and disposed TextWriterJobHost.CallAsync() 和处置的 TextWriter
【发布时间】:2015-09-10 14:10:19
【问题描述】:

在使用 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() 中有一个无限循环,它执行一些逻辑(监控天蓝色表并处理一些数据)并且工作正常。当我添加代码以检查取消令牌或将某些特征记录到提供的日志(TextWriter)中时,问题就开始了。不是立即,它会将 2 个条目写入日志(azure 表“azure-webjobs-hosts”),但随后失败。

可能出了什么问题?为什么这些对象会被丢弃?

【问题讨论】:

    标签: azure-webjobssdk


    【解决方案1】:

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

    哦。为什么在发布之前我没有看到它? :(

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-09
      • 1970-01-01
      相关资源
      最近更新 更多