You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.Net中多次调用异步函数时,await后代码是否并行执行?

.Net异步函数中await后代码的执行逻辑

两次调用的数据库查询:同时并行执行

你连续两次调用FuncAsync("123", "123"),这两个调用会立刻启动,不会互相等待。当执行到await DB.Accounts.Find(...).FirstOrDefaultAsync()时,这是异步IO操作(数据库查询),.Net会把当前线程放回线程池,数据库请求在后台独立处理。两个数据库请求会同时发送到MongoDB,所以是并行执行的,不存在先后排队的情况。

await之后的GetHash():是否并行看同步上下文

每个FuncAsync里的GetHash(),要等对应的数据库查询完成(await结束)才会开始执行。至于两个GetHash()会不会并行,取决于运行环境的同步上下文:

  • 像控制台、ASP.NET Core这种没有单线程同步上下文的环境:await完成后会从线程池取空闲线程执行后续代码,两个GetHash()大概率会在不同线程上并行运行。
  • 要是WPF、WinForms、旧版ASP.NET这类有单线程同步上下文的环境:await完成后会回到原线程执行,这时两个GetHash()只能串行执行(单线程一次只能处理一个任务)。

另外要注意,GetHash()是同步阻塞方法,执行时会占用当前线程直到哈希计算完成,不会释放线程。


内容的提问来源于stack exchange,提问作者Ростислав Романець

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 04:05:10