2013-06-28 34 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。處理該異常。您應該在輸出窗口中將其視爲「第一次機會例外」。

這是所有正常行爲。如果你想檢查你是否可以捕獲異常,請嘗試一些實際上會拋出異常的東西。也許加載一種類型的文檔,同時試圖將其轉換爲另一種類型的文檔。這肯定會拋出異常。