Fan In
The goal of the Fan In design pattern is to combine results from multiple workers. This design pattern is helpful when our workers produce results and we need to gather them.
This design pattern is the opposite of the Fan Out design pattern we discussed in the previous section. Instead of multiple coroutines reading from the same channel, multiple coroutines can write their results to the same channel.
Combining the Fan Out and Fan In design patterns is a good base for MapReduce algorithms. To demonstrate this, we'll slightly change the workers from the previous example, as follows:
private fun CoroutineScope.doWorkAsync( channel: ReceiveChannel<String>, resultChannel: Channel<String> ) = async(Dispatchers.Default) { for (p in channel) { resultChannel.send(p.repeat(2)) } }
Now, once done, each worker sends...