Description. A party
X
engages in two causally related interactions: in the first interaction
X sends a message to another party Y (the request), while in the second
one X receives a message from Y (the response).
Case 1: Blocking
send/receive
The task that sends the request
is also responsible for collecting the response. Thus the task blocks
until
the interaction is completed.
Case 2: Non-blocking
send/receive
After the request is sent,
processing at the sender's side continues. Eventually, the receiver
will reach a point where it will wait for the response.
Case 3: Blocking
send/receive with fault
Same as the first case but a
fault occurs during the
interaction. In this example, the fault is propagated both to the
requestor and the respondent. Depending on the underlying communication
infrastructure and protocols used, it may happen that the requestor
does not detect the fault directly, but instead keeps waiting for a
response until a timer expires.
The case of "non-blocking send/receive with fault" is
similar to this one except that the execution on the requestor's side
does not block at the
task where the message is emitted.