The mempool currently seems to require asynchronous ABCI calls to returns responses in the same order they were called - e.g. CListMempool.recheckCursor has an ordered list of transactions to recheck, but calls CheckTxAsync to actually recheck them, which may return responses in a different order.
This caused #5439, since the gRPC ABCI client, although serial in nature, used unordered goroutines to simulate async responses in order to satisfy the async API semantics.