The type of remote request (synchronous or asynchronous) is determined by options on the RUN statement. The AppServer in a session-managed application can handle both types of requests in the same AppServer session and over the same client connection. For a session-free application, OpenEdge also supports both types of request for any client binding to an application service.
You can initiate as many asynchronous requests as you want at any point during client execution. You can also mix synchronous and asynchronous requests in the same application. The one constraint is that you can initiate a synchronous request only if there are no pending (incomplete) asynchronous requests over the same AppServer connection (session-managed) or for the same application service binding (session-free). OpenEdge also provides a mechanism for you to check the status of asynchronous requests for a session-managed connection or session-free binding.
Note: As suggested earlier, the AppServer agent that executes a request does not know if the request is synchronous or asynchronous. The AppServer broker manages each request on behalf of the client, and dispatches the request for execution according to the AppServer operating mode (state-reset, state-aware, stateless, or state-free). Consequently, the client can execute synchronous and asynchronous requests without regard to the AppServer operating mode.