At least for debugging, I would consider building this sort of thing using an async state machine pattern. You know at certain times you are expecting to query for multiple things. So you issue each request one at a time and wait for a response and then reenter the state machine and resume where you left off. The good thing about this is you can change it to do as many concurrent commands as you want later on by simply looping over the state machine up to your pending request limit (of course, no limit is maxint).
With MIDI, you’re usually better off not being super aggressive about doing too much at once. That’s been true since the dawn of MIDI.