The exercises Timing Challenge {2,3,4} at the end of the concurrency chapter assume that the thunked functions run long enough that all their printing is accomplished. That will not be true if they are run merely as Lwt_main.run (timingN ()), though. It would suffice to run them as e.g. Lwt_main.run (ignore (timingN ()); fst (Lwt.wait ())) but that would never exit.