我正在使用Windows 8(使用C#),並且在使用異步關鍵字時,我看起來似乎無法很好地處理異常。捕獲異步lambda異常
該場景涉及啓動async
lambda,將其發佈到UI線程上運行。
執行lambda代碼期間發生的異常在調用線程上重新拋出,無法正確捕獲它們。
實施例:這個代碼塊是在某些工作線程執行,並且試圖在UI線程上調度工作:
await Window.Current.Dispatcher.RunAsync
(CoreDispatcherPriority.Normal
, async() =>
{
var result = await CurrentAppSimulator
.RequestProductPurchaseAsync("product, true);
}
);
如果lambda表達式內的代碼拋出異常,該異常是不會轉貼回該方法的正文。相反,它是由SynchronizationContext或類似的機制拋出的,我似乎無法捕捉它。
我想要的是能夠從這段代碼(調用代碼)中捕獲此異常。
這可能嗎?
你爲什麼使用Dispatcher進行呼叫?如果沒有其他線程,則不需要這樣做;異步調用一個函數不會創建一個新線程... – daryal 2013-04-26 08:32:24
另外,您是否在RequestProductPurchaseAsync方法中使用TaskCompletionSource? –
daryal
2013-04-26 08:33:43
此代碼在工作線程上執行。添加到問題中。此外,我不使用TCS –
2013-04-26 08:43:17