[英]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 顯示的這些異常?
如果您需要使用ContinueWith ( OnlyOnFaulted或OnlyOnCanceled )來處理任務異常,我們只能在 catch 塊中獲取此異常。 默認情況下,如果任務運行成功,它會拋出異常,如果任務IsFaulted我們可以從Catch Block中獲取異常。
使用觀察任務異常的UnobservedTaskException事件,默認情況下它不會終止。 異常可以由運行時處理。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.