C# Azure函数的HostingEnvironment.QueueBackgroundWorkItem等效项

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

我正在编写一个自定义记录器,它通过网络将Azure函数的日志写入目标。此记录器需要是fire and forget asynchronous–等待每次日志写入的速度太慢。但是,我不希望在每次关闭主机时丢失最后几个日志条目。是否有一种方法可以注册我的异步操作,以便使用相当于
HostingInvorment.QueueBackgroundWorkItem
的东西来编写日志?

好吧,目前Azure函数没有比
QueueBackgroundWorkItem
更适合的了(现代等价物是
IApplicationLifetime
/
IHost
);Azure函数确实在幕后使用这些功能,但最终用户代码无法使用该级别的配置。在一般情况下,有一些持久的功能,但如果仅仅用于日志记录,那就太过分了


也许您的日志系统需要一些工作。我有一个AF,它将日志流式输出到压缩的Azure blob。我在返回AF结果之前刷新了它,到目前为止,我对它的性能很满意。

谢谢Stephen!我也在考虑使用这种方法:在记录器内部跟踪异步操作,并在函数完成之前向使用者公开
FlushAsync
方法。这个实现有点复杂,因为logger作为一个单例,可以在一个函数的多个并发调用中共享,我只希望函数等待刷新它的最后一个日志条目,但这是可行的。找到了一个相关请求,请求将
FlushAsync
方法添加到
ILogger
,以捕获此需求:“在程序逻辑中,有一些点需要知道在该点之前的日志事件在继续之前已经提交。这将涉及执行某种类型的
刷新
,并等待
刷新
完成。目前,只能在应用程序结束时调用
CloseAndFlush()
Dispose
,因为这两种方法都有效地破坏了现有的日志管道。如果有一种方法可以在中间点
Flush
,那就太好了。”“将
Flush
方法添加到
ILogger
。这将刷新管道,并在写入所有挂起的写入时解析。当然,由于新写操作可能会同时引入,
Flush
表示并发事件的部分顺序,但对于在Flush之前写入的事件,应该遵循时间因果关系。”