The lifecycle of each task is driven by RM and NM callbacks. We use the
timer to start the process. While this is overkill here, in a real app,
we'd check requested resource levels (which might change) and number of
tasks (which might change if tasks die), and take corrective action:
adding or removing tasks.