我正在创建几个FirestoreChangeListeners(遵循https://googleapis.github.io/google-cloud-dotnet/docs/Google.Cloud.Firestore/userguide.html上的用户指南)并且一切正常,但是当有网络问题,抛出 System.AggregateException,内部异常是 Grpc.Core.RpcException,状态为“Transport Closed”或“Failed to connect”(这是有道理的)。
问题是我不知道如何捕获或处理这些由 FirestoreChangeListeners 抛出的内部异常,或者我应该如何构造方法才能做到这一点。
我尝试在多个地方添加 try/catch,尝试将 ContinueWith 添加到侦听器,但无论如何我仍然得到未处理的 System.AggregateException。
文档说 Listen 方法是一种“方便”的方法,据说有助于监视 Listener ......它确实包括一个返回 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);
}
}
非常感谢任何人都可以提供的任何帮助!
亲切的问候,达米安