"Efficient" is a relative term here.
Minimize Scan Time
Get all the work done as fast as possible (even if my I/O does not update for 3 seconds)
The two are diametrically opposed. Usually, something between the two is "optimal". What's good about Do-more is that once you have the basic "algorithm" working, tweaking the .TimeSlice (in micro seconds) is the best way to optimize it.
I've generally seen that .TimeSlice around 100 - 500 uSec for general MATH/MOVE type operations does a good enough job at minimizing scan time, but getting a lot of work done on each scan, thus taking less total number of scans to do all the "looping".
A .TimeSlice of 0 means only iterate the loop once and move on to the next code-block ("always yield" - this minimizes scan time).
A .TimeSlice of 65535 is "DirectLOGIC" mode where you will stay in the loop and no other instructions, no other I/O is done until the loop is done (e.g. FOR/NEXT loop in 260), "never yield". If it's 1000 iterations, your PLC literally will loop those instructions 1000 times (better make sure your watchdog timer is high enough for lengthy operations, otherwise it will kick you out of RUN mode - you can even manipulate it programatically in DST23, $WatchdogTimeVal).
We just posted an overview of Programs vs. Tasks in the Do-more Example forum. Look here
http://forum.hosteng.com/index.php/board,20.0.html) and click on the "Overview of Programs Vs. Tasks" topic. Inside there is an attached .PDF of slides that give a good overview of all these details (and many others). I recommend looking at all of those slides to get a good understanding of how Programs and Tasks work inside Do-more.