Correctly? There's no right or wrong, but some things lend themselves to certain programming approaches better than others.
We may be fighting terminology...
A Task is a code block that is enabled to execute through the ENTASK instruction.
A Program is a code block that is enabled to execute through the RUN instruction.
You could do this with either, but Program blocks give you the advantage of using Stages to create sequences. High level async instructions like the CTRIO instructions have the ability to automatically jump to a specified stage upon completion of the operation. For any operation that is a "do this until done, then do that until done, then do the other", stages are the cleanest and most straightforward way of doing the logic.
If you think in terms of enabling a concurrent piece of logic that doesn't require sequencing, a Task is preferred. You might have a Task that controls a temperature and associated alarming, that would be enabled from some other piece of logic.
If you think in terms of running an asynchronously executing standalone operation with multiple states, like running a comm protocol or a complex motion sequence, a Program with Stage is preferred. It steps through the sequence, and when complete, it EXITs. The supervisor RUNs it and then monitors the completion status through the Program block's .Done bit.
Again, no right or wrong...just ideas to make it cleaner. I was mostly just responding to your desire to simplify the code.