-
async awaitt 表达式不阻止正在其上执行的线程 相反,它导致编译器将剩下的异步方法注册为等待的任务上的延续 控制,然后返回至异步方法的调用方 任务完成后会调用自身的继续,且异步方法的执行会恢复到其停止的位置
async awaitt 表达式只发生在一个立即封闭方法的主体、lambda 表达式或由 async 修饰符标记的匿名方法中。 等待术语仅在该上下文中用作关键字 在其他地方,其解释为标识符 在方法、Lambda 表达式或匿名方法中,async awaitt 表达式不会出现在同步函数主体中、查询表达式中、的 catch 或 finally 块中的块中或者的环境中。
大多数异步方法返回 或 返回任务的属性承载囿关其状态和历史记录的信息,例如任务是否已完成异步方法是否引发异常或已取消,以及最终结果如何 async awaitt 运算符访问那些属性。
如果等待导致异常的任务返回的异步方法async awaitt 运算符会再次引发异常。
如果等待取消的任务返回的异步方法async awaitt 运算符再次引发 。
处于出错状态的單个任务可能反映出多个异常 例如,该任务可能是对 调用的结果 当您等待此类任务时,async awaitt 操作只能再次引发异常中的一个 但是,您不能预测哪些异常是重新引发的
有关错误处理同步方法的示例,请参见