2013-06-28 39 views
1

我有一个简单的异步方法,使用LoadAsync异步加载实体。我无法捕获异步调用抛出的异常。调试只会导致'用户代码未处理AggregateException'。我正在使用RavenDB客户端2.0.2375。RavenDB LoadAsync。无法捕捉异常

我怎样才能捕捉到这些例外?

这里的方法:

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.AggregateException是由用户代码未处理 的HResult = -2146233088 消息=一个或多个错误发生。 源= mscorlib程序 堆栈跟踪: 在System.Threading.Tasks.Task.ThrowIfExceptional(布尔includeTaskCanceledExceptions) 在System.Threading.Tasks.Task 1.GetResultCore(Boolean waitCompletionNotification) at System.Threading.Tasks.Task 1.get_Result() 在Raven.Client.Connection.HttpJsonRequest。 <> C_ DisplayClassc.b _9(c)中:\构建\ RavenDB稳\ Raven.Client.Lightweight \连接\ HttpJsonRequest.cs:线128 在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任务)在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承诺,布尔需要同步) InnerException:

+0

你看到相同的行为**没有**附加**调试器**? – YK1

+0

是的。同样的行为。 – Mark

+1

'OpenAsyncSession'可能引发异常?什么是堆栈跟踪? “InnerExceptions”中有什么? – YK1

回答

4

您看到的行为是有效的,并不是因为您无法捕捉异常。这是因为你的例外已经被抓住了。

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

当您正在调试时,您会发现在HTTP响应回到404时引发了一个WebException。处理该异常。您应该在输出窗口中将其视为“第一次机会例外”。

这是所有正常行为。如果你想检查你是否可以捕获异常,请尝试一些实际上会抛出异常的东西。也许加载一种类型的文档,同时试图将其转换为另一种类型的文档。这肯定会抛出异常。