changed throttle to have caller implement sleep