我在Windows 8开发教程中读到使用HTML / JavaScript编写的Metro应用程序在单线程上运行。如果是这样,它如何在WinRT中执行异步函数?
答案 0 :(得分:2)
这是一个多部分的答案。
传统上 - 是的,它是单线程的。异步是在计时器的幕后完成的。 但是,随着Web工作者的出现,您可以在多个线程上运行后台处理(或使用执行线程并依赖.NET进行线程处理的Windows运行时组件)。
Windows Store HTMl / JS应用程序支持Web Workers,所以是的,您可以拥有多个线程。
答案 1 :(得分:0)
是的,JavaScript引擎确实是单线程的。调用API都是本机代码,因此可以 - 并且大多数情况下 - 打开单独的线程。
有关基础机制的详细说明以及有关如何在代码中处理此问题的一些建议,请参阅this MSDN article。
WinJS Promise内部也使用setImmediate
来允许渲染和消息循环在多个JavaScript函数之间接管,并且 - 作为一个重要的副作用 - 缩短了callstack。