Currently RowSet supports iterating (and fetching next pages) from multiple threads.
I've initially introduced this feature as a way to support caching and dequeuing rows from different threads.
Looking back, I think its not something we should support and its highly unlikely somebody is using this feature.
Multithreading support adds a lot of complexity to RowSet implementation and makes dequeuing significantly slower compared to simple array / list iterators.
To support multiple consumers, users could rely on BufferBlock<T> or any other queue / data flow library.
Additionally, we should make RowSet throw an error on multiple iterations instead of returning 0 results. See the comments for more information on this decision.