This is an advanced topic. There are so many possible combinations that it is probably beyond the scope of the forum to discuss them all.
However, task manager execution is driven by the runLoop() method, which you would normally call in the main() or loop() method, it checks if any tasks are ready to be executed and executes them if needed, it also evaluates any events if needed.
As you rightly pointed out below you can use microsToNextTask along with a low power library or call, to avoid busy waiting by repeatedly calling the runLoop method, in fact there is an example of this for SAMD here:
https://www.thecoderscorner.com/products/arduino-libraries/taskmanager-io/task-manager-low-power-samd-example/. A major point to consider is that you must make sure that if you want to process interrupts, that the processor would be awakened from the sleep by that interrupt.
I would say the best way unless it doesn't work is to follow something similar to the example above.