我正在使用 Windows 8(使用 C#),当使用async关键字时,有一种情况我似乎无法很好地处理异常。
该场景涉及启动一个async
lambda,将其发布到 UI 线程上运行。
在执行 lambda 代码期间发生的异常会在调用线程上重新抛出,而无法正确捕获它们。
示例:这段代码在某个工作线程上执行,并尝试在 UI 线程上安排工作:
await Window.Current.Dispatcher.RunAsync
(CoreDispatcherPriority.Normal
, async () =>
{
var result = await CurrentAppSimulator
.RequestProductPurchaseAsync("product, true);
}
);
如果 lambda 表达式中的代码引发异常,则不会将异常重新发布回此方法的主体。相反,它是由 SynchronizationContext 或一些类似的机制抛出的,我似乎无法捕捉到它。
我想要的是能够从这段代码(调用代码)中捕获这个异常。
这可能吗?