page contents

C语言面试题|请简述 await的作用和原理,并说明和 GetResult()有什么区别

轩辕小不懂 发布于 2021-04-19 09:37
阅读 618
收藏 0
分类:C/C++开发

最佳答案 2021-04-19 14:52

644
Pack
Pack

从状态机的角度出发, await的本质是调用 Task.GetAwaiter()的 UnsafeOnCompleted(Action)回调,并指定下一个状态号。

从多线程的角度出发,如果 await的 Task需要在新的线程上执行,该状态机的 MoveNext()方法会立即返回,此时,主线程被释放出来了,然后在 UnsafeOnCompleted回调的 action指定的线程上下文中继续 MoveNext()和下一个状态的代码。

而相比之下, GetResult()就是在当前线程上立即等待 Task的完成,在 Task完成前,当前线程不会释放。

注意: Task也可能不一定在新的线程上执行,此时用 GetResult()或者 await就只有会不会创建状态机的区别了。

请先 登录 后评论