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