lwt.async()无法按预期工作



我正在Mirageos(UNIX)上开发Ocaml中的Web服务,此刻我在Lwt.async()上遇到了一些麻烦。LWT文档指定以下内容:

val async : (unit -> 'a t) -> unit

async f启动一个没有线程的线程 等待结果。如果失败(现在或以后),则例外是 给出了lwt。Async_exception_hook。

如果要启动可能的线程,则应使用此功能 失败,不在乎其回报值是什么,也不关心终止 (例如,因为它在循环)。

因此,我立即将lwt.async视为运行一些测试的好候选人,并检查执行实际上是异步的。不幸的是,它无法正常工作。我的代码如下:

let http_callback conn_id req _body =
  Lwt.return(Uri.path (Cohttp.Request.uri req))
  >>= function
     | "/tester" -> Cohttp_lwt_body.to_string _body >>= fun res -> 
        log_lwt ~inject:(fun f -> f "Testing") >>= fun () ->
        Lwt.async(fun () -> TEST.start 100 res !listOfIP);
        H.respond_string ~status:`OK ~body:("DONE") ()
  in
     let spec = H.make ~callback:http_callback () in
     CON.listen conduit (`TCP 8080) (H.listen spec)

为了清楚起见,test.start执行一系列螺纹操作。我认为LWT.ASYNC内部的功能实际上并不重要,考虑到应忽略的任何返回/所做的函数。我错了吗?

最后,我的问题是:为什么客户实际上必须等待线程接收确定响应?有或没有异步,行为基本上是相同的。

控制只有在等待某物的异步线块时,才会切换回HTTP处理程序。如果仅使用CPU 100%直到完成,则异步线可能会首先运行到完成。尝试在测试中睡觉。

相关内容

  • 没有找到相关文章

最新更新