加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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);
        }

喜欢花哨,但它值得改变错误处理是非常容易的.
但是,如果我想在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表达式.

解决方法

您需要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);
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读