[英]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.