refactor to make use of scheduler's cachedthreadpool