常言道,一图胜千言,我深以为然。正因如此,我偏爱用技术图解来阐释各类概念。最近在研究异步编程,找到了一张图片,它讲述了.NET 中 async/await 是如何运作的。
这张图展示了在涉及 I/O 操作时,.NET 异步编程模型如何运作,特别是在使用 IOCP 模型时任务和状态机如何相互作用。这种模型在处理高性能 I/O 操作时非常重要,如网络通信或文件 I/O,它允许应用程序有效地管理多个并发 I/O 操作,同时保持高响应性和高效率。
DoAsync
这样的方法时,它会“打开”一个设备(如文件、网络连接等),并将该设备“绑定”到 IOCP。这意味着当该设备的 I/O 操作完成时,相关的通知会被发送到 IOCP。Task
对象,用于代表这个异步操作。Task
的结果。这可能涉及到标记任务为成功完成或处理任何在 I/O 操作中发生的错误。SynchronizationContext
(例如在 UI 线程上执行),或者使用自定义的 TaskScheduler
来安排续作的执行。需要注意的是,在 Linux 系统中,我们使用 epoll 机制来代替 IOCPs。这里有专门的 epoll 线程负责监听事件,并把后续操作安排给工作线程执行(这里不会进行内联操作)。
图片出处:https://tooslowexception.com/net-asyncawait-in-a-single-picture/
Copyright© 2013-2020
All Rights Reserved 京ICP备2023019179号-8