求解:async awaitt()已经释放了锁,为什么还要在finally代码块中写lock.unlock();

  • async awaitt 表达式不阻止正在其上执行的线程 相反,它导致编译器将剩下的异步方法注册为等待的任务上的延续 控制,然后返回至异步方法的调用方 任务完成后会调用自身的继续,且异步方法的执行会恢复到其停止的位置

    async awaitt 表达式只发生在一个立即封闭方法的主体、lambda 表达式或由 async 修饰符标记的匿名方法中。 等待术语仅在该上下文中用作关键字 在其他地方,其解释为标识符 在方法、Lambda 表达式或匿名方法中,async awaitt 表达式不会出现在同步函数主体中、查询表达式中、的 catch 或 finally 块中的块中或者的环境中。

    大多数异步方法返回 或 返回任务的属性承载囿关其状态和历史记录的信息,例如任务是否已完成异步方法是否引发异常或已取消,以及最终结果如何 async awaitt 运算符访问那些属性。

    如果等待导致异常的任务返回的异步方法async awaitt 运算符会再次引发异常。

    如果等待取消的任务返回的异步方法async awaitt 运算符再次引发 。

    处于出错状态的單个任务可能反映出多个异常 例如,该任务可能是对 调用的结果 当您等待此类任务时,async awaitt 操作只能再次引发异常中的一个 但是,您不能预测哪些异常是重新引发的

    有关错误处理同步方法的示例,请参见

}

可在 catch 块中使用 语句以重新引发已甴 catch 语句捕获的异常A 下面的示例从 异常提取源信息,然后向父方法引发异常The

method. 例如,任务可能是对

}

我要回帖

更多关于 await 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信