For sake of notifications the tasks provide a clear and highly abstract communication protocol between themselves and their clients. Notifications reduce the amount of knowledge, which a client of a task needs to have about the actual implementation of task objects, to a minimum. Remote system processes are communicating with their corresponding task objects. These objects themselves offer various events to their clients (see Figure 7.4), enabling these clients to asynchronously track the state of the remote system process, and to communicate with it. Prominent examples of such events are activated, terminated, success, or failure.
A task object includes buffers for standard input, standard output, and standard error output, as shown in Figure 7.4. As soon as data is available at one of the output buffers, they raise a write event. Therefore, if a component wants to read the output of a system process while that process is still computing, it has to subscribe to the write event of these buffers.