c# – Async / Await Lambdas
发布时间:2020-12-16 02:03:12 所属栏目:百科 来源:网络整理
导读:我有一个奇怪的问题,结合async / await使其工作: 我创建了一个小程序,它应该基本上处理每个动作的try / catch: internal static void HandledAction(Action action,Info infoBar) { try { action(); } catch (Exception ex) { infoBar.SetError("An Except
我有一个奇怪的问题,结合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); } 喜欢花哨,但它值得改变错误处理是非常容易的. 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表达式. 解决方法
您需要HandleAction的异步版本
internal static async Task HandledAction(Func<Task> action,Info infoBar) { try { await action(); } catch (Exception ex) { infoBar.SetError("An Exception occured: " + ex.Message); WriteLog(ex.StackTrace); } } 当然你应该用await调用方法 private async void mnuImportData_Click(object sender,RoutedEventArgs e) { await ActionHelper.HandledAction(async () => { throw new NotImplementedException("Ups"); },infoMain); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |