我有一个奇怪的问题,结合async/await使其工作:我创建了一个小程序,它应该基本上处理每个动作的try/catch:
internal static void HandledAction(Action action, Info infoBar) { try { action(); } catch (Exception ex) { infoBar.SetError("An Exception occured: " + ex.Message); WriteLog(ex.StackTrace); }
喜欢花哨,但它值得改变错误处理是非常容易的.但是,如果我想在Lambda中获得数据异步,会发生什么?让我们举一个简单的例子:
private void mnuImportData_Click(object sender, RoutedEventArgs e) { ActionHelper.HandledAction(async () => { throw new NotImplementedException("Ups"); }, infoMain); }
当然,HandledAction被调用,传递,因为它返回指针,异常被抛出,当然不会被处理.
我想我必须创建一个AsyncHandledAction,并设置动作异步,但有没有更简单的方法来解决这个问题?
我想很多人都使用中央异常处理,并且有更好的解决方案吗?
提前致谢
马蒂亚斯
编辑:我创建了一个示例,它应该shpw netter我需要:我基本上不希望我传递的整个Action是等待的,但Lambda中的一个调用是:
ActionHelper.HandledActionAsync(() => { //elided CheckFileResult rslt = await excelImport.CheckFilesAsync(tmpPath); //elided }, infoMain);
当然,通过这样做,我得到错误:
错误3'await'运算符只能在异步lambda表达式中使用.考虑使用'async'修饰符标记此lambda表达式.