As Raf suggests, use a parallel-pipeline. This is an ideal candidate.
>>We want to create parallel tasks but the R in task T cannot begin bofore the R in task T-1 is complete
In a parallel pipeline there is the concept called a token. Pipelinesthe number of tokensfactors into the extent of the desired parallelism (min(number of threads, number of tokens)).The token(s) is(are) passed about such that no two tasks (threads) have possession ofany one tokenat the same time. In your case, the token could contain an I/O buffer plus any other temporary buffers and state variables.