Not sure of your logic, but if you are doing indirect/variable addressing, realize that you must maintain the state/values of all parameters during the ENTIRE ASYNCHRONOUS LIFETIME OF THE REQUEST, whether they're variable remote addresses, array indexed Local Address, array indexed parsing of the response packet, whatever.
Since you are doing STREAMOUT/STREAMIN comm type requests, make THAT ATOMIC. Do NOT CHANGE ANYTHING UNTIL THE ENTIRE REQUESTION FINISHES SUCCESSFULLY or IN ERROR.
The question becomes, if you get an error on Request A STREAMOUT, do you keep trying to do STREAMOUT A until it succeeds, or do you always move on to Request A STREAMIN? Or do you move on to Request "B" STREAMOUT regardless on whether Request "A" errored out? Both your failed and success behaviors on A and B need to be timed/sequenced precisely, on both the STREAMOUT cycle and the STREAMIN cycle.
If one of those gets out of synch (success handling/parsing vs. error handling/reporting, A vs. B handling), you could get some strange behavior.