Hi Baloss,
in the general point of view there is no "best" method to do this. Again, there are advantages in both ways - it is depending on the Test you want to do.
I would not recommend to create Tasks and do all the writing and reading in different steps. Sure it might be faster if you are able to get it work, but to get in work it will take a bit of effort. The Task Reference is not Global, so if you pass the Reference to TS and unload the VI from Memory, your Reference will not be valid anymore. If your using Multithreading in some ways you must handle the Resscource so that the Hardware is not blocked by another Task. You see it will be tricky.
I would recommend to write down, what Tests has to be done. Than you can define steps which are as general as possible. So if you want to read a line in one test and 5 lines in another, it could be a could idea to define a step in which you read a hole port into a array and depending on a input array with a "wanted line pattern" you can pass the results of 1 , 2 or more lines needed to TS.
You have one step in which you can perform every read request depending on a input from TS.
The Step will be self-contained and reusable and you can create a Report with the Read-Results.
The same way I would recommend for Write Operations. All with focusing on the Test Results you want to get.
I really hope that helps a bit.
Stefan
NIG