繁体   English   中英

Rollbar .NET API:如何等待所有待处理的异步消息完成?

[英]Rollbar .NET API: How to wait until all pending async messages have completed?

我有一个 .NET 控制台应用程序,它使用官方 Rollbar .NET API将日志消息异步发布到 Rollbar。 用于发送每条消息的 C# 代码如下所示:

RollbarLocator.RollbarInstance.Log(ErrorLevel.Error, "test message");

我注意到,如果我的应用程序在发送异步消息后不久终止,则该消息通常不会发送到 Rollbar - 显然是因为在终止时该消息仍在待处理的 state 中。

如果我的应用程序在退出前休眠几秒钟,所有待处理的消息通常都会成功发送:

// Give outgoing async Rollbar messages time to send before we exit.
System.Threading.Thread.Sleep(6000);

然而,显然,这种方法并不是非常优雅。

文档确实简要介绍了这种情况

但是,在某些特定情况下(例如在退出应用程序之前进行日志记录时),您可能希望完全同步地使用记录器,以便应用程序在日志记录完成之前不会退出(包括随后将相应的有效负载传递到 Rollbar API )。

但是,在我的场景中,我不一定知道在我记录给定消息时程序是否即将退出。

可以记录一个调试级别的“现在退出;” 但是,在程序终止之前同步消息? 从文档中不清楚这样做是否会导致任何未决的异步消息也被发送?

有没有一种优雅的方法可以保证在我的程序终止之前,所有发送到 Rollbar 的未决异步消息实际上已经发送(或超时)?

在这种情况下,您需要使用阻塞记录器。 例如:

RollbarLocator.RollbarInstance
   .AsBlockingLogger(TimeSpan.FromSeconds(6))
   .Log(ErrorLevel.Error, "test message");

有关更多详细信息,请查看此处: https://docs.rollbar.com/docs/basic-usage#blocking-vs-non-blocking-logging

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM