async作为方法结果管理器?

时间:2015-01-16 15:38:07

标签: c# async-await

From here

  

“async”关键字在该方法中启用“await”关键字   更改方法结果的处理方式。这就是所有async关键字   确实!

第二部分让我感兴趣,但我在文章中没有找到解释。

做一点测试(注意 - 没有等待的任务在这里):

  static void X()
    {
        try
        {
            Y();
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }
    }

    static async void Y() //<---- notice here
    {
        throw new NotImplementedException();
    }


    static void Main(string[] args)
    {
        X();

        Console.ReadLine();
    }

这将终止程序:

enter image description here

中删除 async时:

 static async void Y()  
    {
        throw new NotImplementedException();
    }

将屈服:

enter image description here

MSDN对此一无所知:

  

如果async关键字修改的方法不包含await   表达式或语句,该方法同步执行。编译器   警告提醒您任何不包含等待的异步方法,   因为那种情况可能表示错误

问题

如果是这样, else 是什么单词async会使我的代码产生不同的结果?

1 个答案:

答案 0 :(得分:7)

async方法捕获所有异常,不要将它们抛出到方法的调用者,而是将它们包含在方法返回的Task中,将其标记为出错{ {1}}。如果方法是Task,则会在应用程序级别抛出错误,如您所见,因为无法通过async void观察异常。

相关问题