separate task from worker