簡體   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