我正在我的终端点内进行日志记录,其中日志被发送到另一个服务。我不想将发送日志的开销影响到客户端使用的服务,并且即使有时日志传输失败我也不在意。因此,我一直在阅读关于如何简单地“fire and forget”的博客文章。我知道CPU密集型任务不应该使用异步,但我不明白IO相关任务有什么不同,通过IO我指的是调用其他服务的终端点,这种情况下是为了记录日志。
此外,我似乎得到了相互矛盾的观点。有些博客说你永远都不应该运行任何异步操作,因为这只会从线程池中获取一个或多个线程,与同步操作没有任何区别。
Microsoft在.NET 4.5中引入了async和await关键字,他们说你应该为整个终端点使用它们,但这是否仍然会从线程池中获取一个或多个线程?最后,我读过一些stackoverflow帖子,说使用Task.Factory.StartNew是可以的,因为.NET会管理它。
请问在发送日志到另一个服务的最佳实践方面,有人能澄清以上内容吗?我非常困惑。
我考虑使用nlog,因为它具有批处理和异步功能,但我仍不确定这是否是最佳方式。我不能使用像Hangfire这样的工具,因为我没有SQL后端。
提前感谢您的回答。
此外,我似乎得到了相互矛盾的观点。有些博客说你永远都不应该运行任何异步操作,因为这只会从线程池中获取一个或多个线程,与同步操作没有任何区别。
Microsoft在.NET 4.5中引入了async和await关键字,他们说你应该为整个终端点使用它们,但这是否仍然会从线程池中获取一个或多个线程?最后,我读过一些stackoverflow帖子,说使用Task.Factory.StartNew是可以的,因为.NET会管理它。
请问在发送日志到另一个服务的最佳实践方面,有人能澄清以上内容吗?我非常困惑。
我考虑使用nlog,因为它具有批处理和异步功能,但我仍不确定这是否是最佳方式。我不能使用像Hangfire这样的工具,因为我没有SQL后端。
提前感谢您的回答。