C# Azure函数的HostingEnvironment.QueueBackgroundWorkItem等效项
我正在编写一个自定义记录器,它通过网络将Azure函数的日志写入目标。此记录器需要是fire and forget asynchronous–等待每次日志写入的速度太慢。但是,我不希望在每次关闭主机时丢失最后几个日志条目。是否有一种方法可以注册我的异步操作,以便使用相当于C# Azure函数的HostingEnvironment.QueueBackgroundWorkItem等效项,c#,.net,azure,asynchronous,azure-functions,C#,.net,Azure,Asynchronous,Azure Functions,我正在编写一个自定义记录器,它通过网络将Azure函数的日志写入目标。此记录器需要是fire and forget asynchronous–等待每次日志写入的速度太慢。但是,我不希望在每次关闭主机时丢失最后几个日志条目。是否有一种方法可以注册我的异步操作,以便使用相当于HostingInvorment.QueueBackgroundWorkItem的东西来编写日志?好吧,目前Azure函数没有比QueueBackgroundWorkItem更适合的了(现代等价物是IApplicationLif
HostingInvorment.QueueBackgroundWorkItem
的东西来编写日志?好吧,目前Azure函数没有比QueueBackgroundWorkItem
更适合的了(现代等价物是IApplicationLifetime
/IHost
);Azure函数确实在幕后使用这些功能,但最终用户代码无法使用该级别的配置。在一般情况下,有一些持久的功能,但如果仅仅用于日志记录,那就太过分了
也许您的日志系统需要一些工作。我有一个AF,它将日志流式输出到压缩的Azure blob。我在返回AF结果之前刷新了它,到目前为止,我对它的性能很满意。谢谢Stephen!我也在考虑使用这种方法:在记录器内部跟踪异步操作,并在函数完成之前向使用者公开
FlushAsync
方法。这个实现有点复杂,因为logger作为一个单例,可以在一个函数的多个并发调用中共享,我只希望函数等待刷新它的最后一个日志条目,但这是可行的。找到了一个相关请求,请求将FlushAsync
方法添加到ILogger
,以捕获此需求:“在程序逻辑中,有一些点需要知道在该点之前的日志事件在继续之前已经提交。这将涉及执行某种类型的刷新
,并等待刷新
完成。目前,只能在应用程序结束时调用CloseAndFlush()
或Dispose
,因为这两种方法都有效地破坏了现有的日志管道。如果有一种方法可以在中间点Flush
,那就太好了。”“将Flush
方法添加到ILogger
。这将刷新管道,并在写入所有挂起的写入时解析。当然,由于新写操作可能会同时引入,Flush
表示并发事件的部分顺序,但对于在Flush之前写入的事件,应该遵循时间因果关系。”