Tasks.RunnerA runner accepts new tasks repeatedly for parallel execution
val create : 
  ?with_primary_db:bool ->
  jobs:int ->
  child_prologue:(IBase.ProcessPool.Worker.id -> unit) ->
  f:('work, 'result) doer ->
  child_epilogue:(IBase.ProcessPool.Worker.id -> 'final) ->
  (unit -> ('work, 'result) IBase.ProcessPool.TaskGenerator.t) ->
  ('work, 'final, 'result) tCreate a runner running jobs jobs in parallel
val run : (_, 'final, _) t -> 'final option IStdlib.IStd.Array.tStart the given tasks with the runner and wait until completion