When an object executes an asynchronous action with a message as parameter, it starts an asynchronous invocation. The action returns no value and the requesting object does not wait for a reply from the requested object. When the requesting object and the requested object are on different machines, the requesting one even does not wait until the other object actually receives the message.
Upon receiving the message, the requested object might queue it according to a specific strategy, which is not in the scope of the basic action semantics. When it is free, the sequential object processes the message7. Processing the message firstly means a decision on its type is made. The run-time environment must be capable of dynamic class lookup. When the type is determined, the environment can thus match the message with a specific behavior. The execution of this behavior usually results in a procedure call.
The requested object may or may not return some values to the requesting one. If values are to be returned, the requested object must execute another asynchronous or synchronous action.
In contrast, if the requesting object executes a synchronous action, it is blocked until a reply is received from the requested object. Even if no return value is required for the invocation, the requested object must send back a message indicating the processing is complete, and the requesting object is allowed to proceed with its jobs.