if条件中使用Awaitable方法时 执行是否会等待方法返回结果?
代码执行逻辑与合理性说明
执行顺序问题
await 关键字的核心作用是暂停当前方法的执行上下文,等待对应的异步操作完成后才会继续执行后续代码,这个特性和它所处的代码位置无关,哪怕放在if的条件判断里也生效。
你给出的代码会完全按照同步逻辑的顺序串行执行:
- 首先等待
CheckCondition1()执行完成拿到返回值,再判断if条件是否成立、是否要执行Work1() - 第一个if块的逻辑全部处理完成后,才会开始调用
CheckCondition2(),同样等待它执行完成后再处理对应的分支逻辑 - 直到第二个if块处理完成,才会启动
CheckCondition3()的执行
三个CheckCondition方法不会并行执行,总耗时是三个方法执行耗时加上三个Work方法执行耗时的总和。
代码合理性判断
这段代码是否合理完全取决于你的业务需求:
- 如果三个检查逻辑本身有先后依赖关系,或者后面的检查/Work方法的执行依赖前面逻辑的执行结果,那当前写法完全合理,符合业务要求
- 如果三个检查逻辑之间没有任何依赖,且都是耗时较长的IO密集型操作,那当前写法的执行效率较低,没有利用到异步并行的优势,可以调整为并行执行检查的版本:
// 先同时启动所有异步检查任务,不会阻塞等待 var condition1Task = CheckCondition1(); var condition2Task = CheckCondition2(); var condition3Task = CheckCondition3(); // 再依次等待结果判断分支 if (await condition1Task) { Work1(); } if (await condition2Task) { Work2(); } if (await condition3Task) { Work3(); }
调整后三个检查逻辑会并行执行,总耗时近似等于三个检查任务中耗时最长的那个,能大幅提升执行效率。
内容的提问来源于stack exchange,提问作者Tschareck
相关产品推荐
相关产品推荐

