Channels are the simplest mechanism for 2 tasks to exchange data.
A synchronous communication pipe between 2 tasks.
Send data over the channel. The calling task will be blocked if there is no task waiting for the data on the other side.
Send the given exception. It will be raised on the receiving task.
Wait for data to arrive on the channel.