如何解决c#wpf如何捕获FirestoreChangeListener异常
我正在创建几个 Firestorechangelisteners (遵循https://googleapis.github.io/google-cloud-dotnet/docs/Google.Cloud.Firestore/userguide.html上的《用户指南》),并且一切正常,但是当出现网络问题时,系统将抛出System.AggregateException。内部异常是Grpc.Core.RpcException,状态为“传输已关闭”或“无法连接”(这很有意义)。
问题是我无法弄清楚如何捕获或处理这些由Firestorechangelistener引发的内部异常,或者我应该如何构造该方法以实现此目的。
我尝试在多个位置添加try / catch,尝试将ContinueWith添加到侦听器,但是无论我还是遇到未处理的System.AggregateException。
文档中说,Listen方法是一个“便捷”方法,据称有助于监视监听器...并且它确实包含一个返回Task的ListenerTask方法。也许我需要对这些任务做些...我已经阅读了所有建议,我应该等待,但是由于它是一个异步侦听器,在程序运行的整个过程中都在后台运行,因此我不确定应该使用哪种方法等待...不会等待整个方法吗?
我的代码是:
public void Connect()
{
// Authentication code...
if (authenticated) CreateFirestorechangelisteners();
}
public void CreateFirestorechangelisteners()
{
foreach (var docRef in documentReferences.Values)
{
Firestorechangelistener listener = docRef.Listen(querySnapshot =>
{
try
{
ProcessSnapshot(querySnapshot);
}
catch (Exception ex)
{
Debug.WriteLine("Firestorechangelistener: " + ex);
}
});
listener.ListenerTask.ContinueWith((task) =>
{
Console.WriteLine("Task faulted");
var ae = task.Exception;
if (ae != null)
{
ae.Flatten().Handle(ex =>
{
Console.WriteLine("Exception Handled");
return true;
});
}
});
firestorechangelisteners.Add(listener);
}
}
非常感谢任何人都能提供的帮助!
亲切的问候, 达米安
解决方法
根据乔恩在https://github.com/googleapis/google-cloud-dotnet/issues/5462的调查,底层gRPC代码中存在错误。
Jon建议的解决方法也可以正常工作,并且可以很好地解决此问题:
TaskScheduler.UnobservedTaskException += (sender,args) =>
{
if (args.Exception is AggregateException && args.Exception.InnerException is RpcException)
{
args.SetObserved();
}
};
谢谢!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。