weixin_46476233 2022-08-25 14:43 采纳率: 0%
浏览 42

c#多线程异步await不会阻塞线程

await 会从线程池中另起一个线程来执行任务,而线程池的管理是交由我们的Task去控制的

  • 写回答

2条回答 默认 最新

  • wanghui0380 2022-08-25 15:56
    关注

    为啥又是await跟task纠结的

    async/await----------------这才是一对啊。

    异步IO和等待,他只是启动了一个异步IO动作,等待系统IO管理器异步完成IO,等完成IO以后通知从线程池里挑选一个状态为Complate的线程执行回调动作

    那么假设是某园子吹的IOCP,他等待的是网络IO,他不启动线程,他只是发起了一个 windows IOCP 的IRQ请求,等这个异步请求执行完毕,系统通过软中断唤醒,然后他在从线程池里调个空闲线程把消息回调给你

    当然 如果你是 await Task.Run(),这类才算启动了一个线程

    总结:异步不必线程(如果是驱动级异步IO无需线程),线程不必异步(如果你不需要去拿结果,那么你大可以不必管他,他执行完毕线程自然消亡)

    另外:池和本题毫无关系,池是背压控制手段。因为手上一旦有锤子,看啥都是钉子。所以设计师们会强行约束你的行为,控制背压。不让你看啥都去线程,设计师得约束你进水,出水大致相当(小学题目,一管进水,一管出水,请问多长时间池子满/空,池的目的也就是如此,当你开始看啥都是线程的时候,官方就得提醒你池满了,请不要在放水了)

    评论

报告相同问题?

问题事件

  • 创建了问题 8月25日

悬赏问题

  • ¥15 做一个简单项目,用Python分析共享单车的数据
  • ¥20 在使用CESM2.2.0模型进行case.submit过程中出现如下错误(关键词-Map)
  • ¥15 有办法改变通过wifi进入的网站的设置吗
  • ¥15 所以到底怎么算!算到凌晨五点都算不出来!
  • ¥15 label_studio
  • ¥15 请教如何phython发邮件
  • ¥15 linux系统安装问题
  • ¥15 路径规划如何采用矢量法让他们尽量在一个方向
  • ¥15 crypto 一道rsa解密题
  • ¥15 survIDINRI已将生存时间转为数值变量,仍错误 Time variable is not numeric。