The Symphony API uses a callback thread pool to return results to the SessionCallback. That means that while the client is executing the response handler, it blocks further results from being returned to the application layer. So, if the client takes a long time in the response handler (doing I/O or long calculations), then the client should have a separate thread or threads to handle the real result processing.
: This method will be invoked by a callback thread pool within the API. Although the current thread pool has only a single thread in it, the developer should not assume that the invocation of this method will be done in a serial manner. This means that in principle, this method can be called at any time and it is the developer's responsibility to make this call thread-safe.
One way to implement this is to have the response handler simply hand off the response to a queue and then return immediately. The result-processing thread can pick up items from the queue and process them one-by-one.