RavenDB LoadAsync.可以';t捕获异常

本文关键字:捕获异常 LoadAsync 可以 RavenDB | 更新日期: 2023-09-27 18:20:11

我有一个简单的异步方法,它使用LoadAsync异步加载实体。我无法捕获异步调用引发的异常。调试只会导致"用户代码未处理AggregateException。"我使用的是RavenDB客户端2.0.2375。

如何捕捉这些异常?

方法如下:

 private async Task<Dummy> GetDummyAsync(string id)
    {
        using (var session = docStore.OpenAsyncSession())
        {
            try
            {
                var dummy = await session.LoadAsync<Dummy>(id);
                return dummy;
            }
            catch (Exception ex)
            {
                return null;
            }
        }
    }

编辑

这里有一个例外:

用户代码未处理System.AggregateExceptionHResult=-2146233088消息=出现一个或多个错误。来源=mscorlibStackTrace:位于System.Threading.Tasks.Task.SthrowIfExceptional(布尔值包括TaskCanceledExceptions)位于System.Threading.Tasks.Task 1.GetResultCore(Boolean waitCompletionNotification) at System.Threading.Tasks.Task 1.get_Result()位于Raven.Client.Connection.HttpJsonRequest。<>c:''Builds''RavenDB Stable''Raven.Client.Lightweight''Connection''HttpJsonRequest.cs:line 128中的c_DisplayClassc.b_9()位于c:''Builds''RavenDB Stable''Raven.Client.Lightweight''Connection''HttpJsonRequest.cs:line 128中的Raven.Customer.Connection.HttpJsonRequest.ReadJsonInternal(Func 1 getResponse) in c:'Builds'RavenDB-Stable'Raven.Client.Lightweight'Connection'HttpJsonRequest.cs:line 351 at Raven.Client.Connection.HttpJsonRequest.<InternalReadResponseStringAsync>b__8(Task 1任务)在System.Threading.Tasks.ContinuationResultTaskFromResultTask 2.InnerInvoke() at System.Threading.Tasks.Task.Execute() InnerException: System.Net.WebException HResult=-2146233079 Message=The remote server returned an error: (404) Not Found. Source=System StackTrace: at System.Net.HttpWebRequest.EndGetResponse(IAsyncResult asyncResult) at System.Threading.Tasks.TaskFactory 1.FromAsyncCoreLogic(IAsyncResult-iar,Func 2 endFunction, Action 1 endAction,Task `1 promise,Boolean requiresSynchronization)内部异常:

RavenDB LoadAsync.可以';t捕获异常

您看到的行为是有效的,而不是因为您无法捕获异常。这是因为你已经发现了异常。

在RavenDB中,如果尝试加载不存在的文档,LoadLoadAsync方法将返回null。他们不会抛出异常。

当您进行调试时,您会看到在后台,当HTTP响应返回为404时,会抛出一个WebException。处理该异常。您应该在输出窗口中看到它作为"First Chance Exception"。

这都是正常的行为。如果您想检查是否可以捕获异常,请尝试实际抛出异常的方法。也许加载一种类型的文档,同时尝试将其强制转换为另一种类型。这肯定是个例外。