Create a flag which says if there is a pending task:
class TaskListener : MonoBehaviour {
private bool taskIsRunning = false; // set to true when you start the task
Update(){
if (taskIsRunning && IsTaskCompleted()){
taskIsRunning = false;
gameObject.SetActive(true);
}
}
//...
Another option is to make the task itself aware of which objects need to be activated when it's finished and make that a part of the task.
When the task can't know which objects it needs to notify at its end, you could also use an Unity Broadcast Message to call a specific method on every script which has it in a specific branch of your scene tree. But keep in mind that this isn't very fast, especially when you have a large branch.
Or you could use the Unity Event System. Have the task trigger a custom event when it's finished and have each script which is supposed to react on that event implement a custom event handler interface.