【发布时间】:2017-01-11 01:00:29
【问题描述】:
下面的例子触发了 1000 个间隔为 100μs 的异步 usleep 调用,然后在 joining 之前阻塞了主线程:
<?hh
$awaitable = HH\Asio\v((new Vector(range(1, 1000)))->map((int $wait_time) ==> {
return async {
await HH\Asio\usleep($wait_time*100);
echo $wait_time."\n";
};
}));
usleep(1000000);
HH\Asio\join($awaitable);
The result in stdout (3v4l) 表示控制返回到async 范围的顺序。
该程序始终输出一个从 1000 到 1 的单调递减序列,这表明完成的 Awaitables 被压入堆栈并在线程以 LIFO 顺序释放后弹出。这个订单是真的吗,我可以信赖吗?
【问题讨论】:
标签: async-await hacklang