与常见的误解相反,async/await 不会创建新线程。 相反,它采用协作式多任务处理来显着提高应用程序响应能力。
异步/等待如何工作
编译器巧妙地将使用 async/await 的方法分为两部分:
await
关键字之前的代码,包括异步操作的启动。await
关键字后面的代码。执行顺序:
await
语句。 调用异步操作(例如,GetSomethingAsync()
)。此操作返回待处理结果(如 Task
)。SynchronizationContext
被告知异步操作已完成。 控制权返回到消息循环,允许其处理其他任务。SynchronizationContext
会收到通知。SynchronizationContext
将一条消息添加到消息循环队列,触发第 2 部分的执行。消息循环对此进行处理,从 await
之后的点重新启动该方法。 提高响应能力
当异步操作挂起时,消息循环仍然可以自由处理用户输入和 UI 更新,从而保持应用程序的响应能力。 完成后,第 2 部分将更新应用程序状态。
重要注意事项:
SynchronizationContext
使用协作式多任务处理,而不是创建线程。以上是在不使用其他线程的情况下,异步如何提高应用程序响应能力?的详细内容。更多信息请关注PHP中文网其他相关文章!