如何让AnyEvent实现顺序执行?优化AnyEvent与Coro结合的代码
AnyEvent 与 Coro 集成的代码优化方案
你可以直接利用Coro提供的rouse_cb和rouse_wait机制简化代码,替代手动创建condvar的流程,优化后的代码如下:
use AnyEvent::HTTP; use Coro; async { # 优化后的代码 my ($data, $hHeaders) = http_request(GET => $url, Coro::rouse_cb); … }
说明
Coro::rouse_cb会生成一个回调函数,当http_request完成时自动触发;http_request在接收这个回调后,会直接返回Coro::rouse_wait的结果,省去了手动创建条件变量、绑定回调、调用recv的三步操作,代码更简洁直观。
官方推荐方式:在man AnyEvent中,还给出了一种更贴合AnyEvent::HTTP的写法,核心思路和上面一致,但用http_get简化了GET请求的调用:
AnyEvent::HTTP::http_get $url, Coro::rouse_cb; my ($body, $hdr) = Coro::rouse_wait;
内容的提问来源于stack exchange,提问作者AnFi
相关产品推荐
相关产品推荐

