簡體   English   中英

EventHub 發送消息,但 Application Insights 上的 System.Net.Sockets.SocketException

[英]EventHub send message, but System.Net.Sockets.SocketException on Application Insights

我在下面有這個代碼,它將消息發送到 azure EventHub,起初它工作正常

public async Task SendMessage(string message) {
            
    var producer = new EventHubProducerClient(this.connectionString, this.eventHubName);
   
    using (EventDataBatch eventBatch = await producer.CreateBatchAsync()) {
        if (!eventBatch.TryAdd(new EventData(message))) {
            throw new Exception($"Event is too large for the batch and cannot be sent.");
        }

        try {
            await producer.SendAsync(eventBatch);
        }
        catch(Exception ex) {
            saveLog(message, ex);
        }
        finally {
            await producer.DisposeAsync();
        }
    }
}

但在 Application Insights 中,我遇到了此消息異常:

通過等待任務或訪問其異常屬性未觀察到任務的異常。 結果,未觀察到的異常被終結器線程重新拋出。 連接嘗試失敗,因為連接的一方在一段時間后沒有正確響應,或者連接失敗,因為連接的主機沒有響應

異常類型:

System.Net.Sockets.SocketException

我試圖添加一個 ContinueWith (OnlyOnFaulted 或 OnlyOnCanceled),如下所示,以記錄它,但現在我進入 catch Exception (不在 ExceptionHandle 中)作為“任務已取消”

try {    
  await producer.SendAsync(eventBatch)
   .ContinueWith(t => ExceptionHandle(t, message), TaskContinuationOptions.OnlyOnFaulted);
                }

如何處理 App Insights 顯示的這些異常?

如果您需要使用ContinueWithOnlyOnFaultedOnlyOnCanceled )來處理任務異常,我們只能在 catch 塊中獲取此異常。 默認情況下,如果任務運行成功,它會拋出異常,如果任務IsFaulted我們可以從Catch Block中獲取異常。

要解決此問題:

使用觀察任務異常的UnobservedTaskException事件,默認情況下它不會終止。 異常可以由運行時處理

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM