Barrier
The Barrier design pattern provides us with the ability to wait for multiple concurrent tasks to complete before proceeding further. A common use case for this is composing objects from different sources.
For example, take the following class:
data class FavoriteCharacter( val name: String, val catchphrase: String, val picture: ByteArray = Random.nextBytes(42) )
Let's assume that the catchphrase
data comes from one service and the picture
data comes from another. We would like to fetch these two pieces of data concurrently:
fun CoroutineScope.getCatchphraseAsync ( characterName: String ) = async { … } fun CoroutineScope.getPicture ( characterName: String ) = async { … }
The most basic way to implement concurrent fetching would be as follows:
suspend fun fetchFavoriteCharacter(name: String) = coroutineScope { ...