我有一个简单的异步方法,使用LoadAsync异步加载实体 . 我无法捕获异步调用抛出的异常 . 调试只会导致'AggregateException未被用户代码处理 . '我正在使用RavenDB Client 2.0.2375 .
我怎样才能 grab 这些例外情况?
这是方法:
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;
}
}
}
Edit
这是例外:
用户代码未处理System.AggregateException HResult = -2146233088消息=发生一个或多个错误 . Source = mscorlib StackTrace:在System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions)处于System.Threading.Tasks.Task 1.GetResultCore(Boolean waitCompletionNotification) at System.Threading.Tasks.Task
1.get_Result()at Raven.Client.Connection.HttpJsonRequest . <> c_DisplayClassc.b_9()in c:\ Builds \ RavenDB-Stable \ Raven.Client.Lightweight \ Connection \ HttpJsonRequest.cs:第128行,位于c:\ Builds \ RavenDB-Stable \ Raven中的Raven.Client.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任务) .Client.Lightweight \ Connection \ HttpJsonRequest.cs: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
中的第128行1.FromAsyncCoreLogic(IAsyncResult iar,Func 2 endFunction, Action
1 endAction,Task`1 promise,Boolean requiresSynchronization)InnerException:
1 回答
您看到的行为是有效的,而不是因为您无法捕获异常 . 这是因为异常已经为你 grab 了 .
在RavenDB中,如果您尝试加载不存在的文档,
Load
或LoadAsync
方法将返回null
. 他们不会抛出异常 .在进行调试时,您会发现当HTTP响应返回404时,会引发
WebException
. 处理该异常 . 您应该在输出窗口中将其视为"First Chance Exception" .这都是正常行为 . 如果要检查是否可以捕获异常,请尝试实际抛出异常的内容 . 也许在尝试将其转换为另一种文档时加载一种类型的文档 . 这肯定会引发例外 .