异步方法与返回Task的方法的区别

异步方法:
异步方法一定包含async关键字,并且返回类型必须为Task或Task<T>或void。
一般规定异步方法名以async结尾。
方法体中包含至少一个await表达式,如果不包含await表达式则异步方法将被当作同步方法处理,并且编译器给出警告。
调用异步方法时要使用await关键字计算结果(等待结果),返回void的异步方法除外。
如果不使用关键字await,方法调用返回的结果为Task类型。
特别注意:在接口中定义异步方法时,不能使用关键字async。

返回Task的方法:
方法体中不能包含await表达式。
只能使用await关键字计算任务结果。
如果不使用关键字await,方法调用返回的结果为Task类型。

综上总结出异步方法与返回Task的方法的关系,他们都可以使用await关键字计算结果,也可以不使用,唯一的区别是在方法体中如果包含await表达式,则方法声明处(实现方法的地方,因此接口声明中除外)必须包含async关键字。

返回void的异步方法:
返回void的异步方法用于执行称为“发后不理(fire forget)”的活动,不能用await表达式,并且不能捕获异步方法的异常。