background task impl