If the task is to spawn (not complete) a function at specified intervals, timer:apply interval works just fine. Just did a 3-module demo with a gen_server. Interval: 1 ms. Run for 3, then 10 seconds. Result nr of loops =:= expected number. Email me for the code.