String): User {} fun displayUser(user: User) {} fun coroutines() { launch { val token = requestToken() val user = createUser(token) displayUser(user) } }
String): User {} fun displayUser(user: User) {} fun coroutines() { launch(context = CommonPool) { val token = requestToken() val user = createUser(token) withContext(UI) { displayUser(user) } } }
String): User {} fun displayUser(user: User) {} fun coroutines() { launch(context = CommonPool) { val token = requestToken() val user = createUser(token) withContext(UI) { displayUser(user) } } } KotlinConf 2017 - Introduction to Coroutines by Roman Elizarov https://youtu.be/_hfBv0a09Jc KotlinConf 2017 - Deep Dive into Coroutines on JVM by Roman Elizarov https://youtu.be/YrrUCSi72E8
suspend fun send(element: E) suspend fun receive(): E operator fun iterator(): ChannelIterator<E> } interface ChannelIterator<out E> { suspend operator fun hasNext(): Boolean suspend operator fun next(): E }
suspend fun send(element: E) suspend fun receive(): E operator fun iterator(): ChannelIterator<E> } interface ChannelIterator<out E> { suspend operator fun hasNext(): Boolean suspend operator fun next(): E } val channel = Channel<Int>() launch { for (value in channel) { print(value) } } launch { for (x in 1..5) channel.send(x * x) channel.close() }
= ConflatedBroadcastChannel<User>() override val user: ReceiveChannel<User> get() = _user.openSubscription() override suspend fun setName(name: String) { val newUser = // on update le user sur une API par exemple ... _user.send(newUser) } override suspend fun setAge(age: Int) { val newUser = // on update le user sur une API par exemple ... _user.send(newUser) } }