C#.NET 面试题 中高级篇(二)
async/await 底层源码阅读
async、await 内部其实是靠状态机机制实现的。
编译器遇到 await 后会自动构建骨架与状态机,把 await 后面的代码挪到任务完成的后面继续执行。主线程第一次调用 MoveNext 方法时,如果任务已经完成会直接执行后面的操作,否则直接返回,不阻塞主线程的运行。后面的流程将交由线程池来调度完成。
async/await 和同步代码区别
async/await 和同步代码中的区别主要包括:执行方式、返回值类型和代码结构。
异步代码通过使用 async/await 关键字来标记,告诉编译器该代码可以异步执行。相比之下,同步代码是按顺序执行的,每一行代码都需要等待前一行代码执行完毕后才能继续执行。
异步代码的主要优势在于能够提高程序的响应性能,特别是在处理 I/O 密集型任务时。同步代码则适用于对时间敏感的操作,因为同步代码执行的速度更可控。