lwt
2.1.1
========== Code:
open
Lwt
let cococo = ref 0
let connections = Lwt_pool.create 1 (fun () -> let () =
(incr cococo) in return (string_of_int !cococo))
let test x dbh
=
catch (fun _
->
Lwt_io.printl ("Start " ^ x ^ dbh)
>>
Lwt_unix.sleep 1.0
>>
Lwt_io.printl ( "[" ^ x ^ "] A " ^ dbh)
>>
Lwt_unix.sleep 1.0
>>
Lwt_io.printl ( "[" ^ x^ "] B " ^ dbh)
>>
Lwt_unix.sleep 1.0
>>
Lwt_io.printl ( "[" ^ x^ "] C " ^ dbh
);
)
(fun e -> Lwt_io.printl ( "[" ^ x ^ "] Cancelled " ^ dbh ^ "
" ^ Printexc.to_string e) >> Lwt.fail e)
let ct n = Lwt_pool.use connections (test n)
let t = Lwt.join [ct "t1"; ct "t2" ; ct "t3"; ct "t4"; ct "t5"
] in Lwt_main.run t
============ Compilation command:
ocamlfind ocamlc -o test -syntax camlp4o -package
lwt,lwt.unix,lwt.syntax -linkpkg test.ml
====================== Output:
Start t51
[t5] A 1
[t5] B 1
[t5] C 1
Start t41
[t4] Cancelled 1 Lwt.Canceled
Start t31
[t3] Cancelled 1 Lwt.Canceled
Start t21
[t2] Cancelled 1 Lwt.Canceled
Start t11
[t1] Cancelled 1 Lwt.Canceled
Fatal error: exception Lwt.Canceled
========================
What's wrong in code? Why it raise Canceled exception?