C# ravendbloadasync。Can';捕捉不到异常

C# ravendbloadasync。Can';捕捉不到异常,c#,asp.net,ravendb,async-await,C#,Asp.net,Ravendb,Async Await,我有一个简单的异步方法,使用LoadAsync异步加载实体。我无法捕获异步调用引发的异常。调试只会导致“AggregateException未经用户代码处理”。我使用的是RavenDB客户端2.0.2375 如何捕获这些异常 方法如下: private async Task<Dummy> GetDummyAsync(string id) { using (var session = docStore.OpenAsyncSession()) {

我有一个简单的异步方法,使用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;
            }
        }
    }
专用异步任务GetDummySync(字符串id)
{
使用(var session=docStore.OpenAsyncSession())
{
尝试
{
var dummy=await session.LoadAsync(id);
返回假人;
}
捕获(例外情况除外)
{
返回null;
}
}
}
编辑

例外情况如下:

用户代码未处理System.AggregateException HResult=-2146233088 消息=发生了一个或多个错误。 Source=mscorlib 堆栈跟踪: 位于System.Threading.Tasks.Task.ThrowifeException(布尔值IncludeTaskCanceledException) 位于System.Threading.Tasks.Task
1.GetResultCore(布尔waitCompletionNotification)
在System.Threading.Tasks.Task中
1.get_Result() 在c:\Builds\RavenDB Stable\Raven.Client.Lightweight\Connection\HttpJsonRequest.cs中的Raven.Client.Connection.HttpJsonRequest.c_DisplayClassc.b_9()中 在c:\Builds\RavenDB Stable\Raven.Client.Lightweight\Connection\HttpJsonRequest.cs中的Raven.Client.Connection.HttpJsonRequest.ReadJsonInternal(Func
1 getResponse)处:第351行
在c:\Builds\RavenDB Stable\Raven.Client.Lightweight\Connection\HttpJsonRequest.cs中的Raven.Client.Connection.HttpJsonRequest.8(任务
1任务)处:第128行 在System.Threading.Tasks.ContinuationResultTaskFromResultTask
2.InnerInvoke()中
在System.Threading.Tasks.Task.Execute()中
InnerException:System.Net.WebException
HResult=-2146233079
Message=远程服务器返回错误:(404)未找到。
来源=系统
堆栈跟踪:
位于System.Net.HttpWebRequest.EndGetResponse(IAsyncResult asyncResult)
在System.Threading.Tasks.TaskFactory中
1.FromAsyncCoreLogic(IAsyncResult iar,Func
2 endFunction,Action
1 endAction,Task`1 Promission,布尔要求同步)
InnerException:

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

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

在调试时,您会看到在HTTP响应返回为404时,会抛出一个
WebException
。该异常已被处理。您应该在输出窗口中将其视为“第一次机会异常”


这都是正常的行为。如果要检查是否可以捕获异常,请尝试实际引发异常的方法。可能在尝试将一种类型的文档转换为另一种类型时加载该文档。这肯定会引发异常。

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

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

在调试时,您会看到在HTTP响应返回为404时,会抛出一个
WebException
。该异常已被处理。您应该在输出窗口中将其视为“第一次机会异常”


这都是正常的行为。如果要检查是否可以捕获异常,请尝试实际引发异常的方法。可能在尝试将一种类型的文档转换为另一种类型时加载该文档。这肯定会引发异常。

这可能会帮助您找到解决方案:您是否在没有附加调试器的情况下看到相同的行为?异常可能是由
OpenAsyncSession
引发的?什么是堆栈跟踪?
InnerExceptions
中有什么?根据我所做的操作,异常会发生变化。如果我请求一个无效的文档,它们就是HTTP 404异常。我可以用未处理的ExceptionTrapper捕捉异常,但这并不是我想要做的。也许我误解了什么,但凌晨4点我开始觉得乌鸦里有虫子。我明天会更深入地探讨这个问题。内在的例外并不重要。对于测试,我只加载了一个不存在的文档,内部异常是System.Net.WebException:“Message=远程服务器返回了一个错误:(404)Not Found.”这可能会帮助您找到解决方案:您在没有附加调试器的情况下看到相同的行为吗?异常可能是由
OpenAsyncSession
引发的?什么是堆栈跟踪?
InnerExceptions
中有什么?根据我所做的操作,异常会发生变化。如果我请求一个无效的文档,它们就是HTTP 404异常。我可以用未处理的ExceptionTrapper捕捉异常,但这并不是我想要做的。也许我误解了什么,但凌晨4点我开始觉得乌鸦里有虫子。我明天会更深入地探讨这个问题。内在的例外并不重要。为了进行测试,我只加载了一个不存在的文档,内部异常是System.Net.WebException:“Message=远程服务器返回了一个错误:(404)找不到。”