JobHost.CallAsync() 并处置 TextWriter
JobHost.CallAsync() and disposed TextWriter
使用 Azure WebJobs SDK,当我在 JobHost
实例上使用 CallAsync()
触发我的函数时,传递到我的函数中的 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 tables 并处理一些数据)并且工作正常。当我添加代码以检查取消令牌或将某些特征记录到提供的日志 (TextWriter) 中时,问题就开始了。不是立即,它将 2 个条目写入日志 (azure table "azure-webjobs-hosts") 但随后失败。
有什么问题吗?为什么要处理这些对象?
糟糕,刚刚注意到函数签名中的明显错误 - 应该有 Task
而不是 void
(public static async Task ProcessAggregationsAsync(...)
)。
呵呵。为什么我在不得不 post 之前没有看到它? :(
使用 Azure WebJobs SDK,当我在 JobHost
实例上使用 CallAsync()
触发我的函数时,传递到我的函数中的 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 tables 并处理一些数据)并且工作正常。当我添加代码以检查取消令牌或将某些特征记录到提供的日志 (TextWriter) 中时,问题就开始了。不是立即,它将 2 个条目写入日志 (azure table "azure-webjobs-hosts") 但随后失败。
有什么问题吗?为什么要处理这些对象?
糟糕,刚刚注意到函数签名中的明显错误 - 应该有 Task
而不是 void
(public static async Task ProcessAggregationsAsync(...)
)。
呵呵。为什么我在不得不 post 之前没有看到它? :(