Another few considerations: 1. What is the lifetime of the objects being returned (effectively as out parameters)? 2. Are all threads that contend with each other getting values now going after the same row of results? 3. Would not a caching scheme accomplish what you are after, without need of implementing a new API?