future task with cache