kotlin协程中onAwait和await()的不同之处

问题描述 投票:0回答:2

kotlin协程中的onAwait和await()有什么不同,android中的dan功能如何实现?我有这样的代码

var value = ""
val resultEmail = async {
   viewModel.email.collect { email ->
       //get email here
       value = email
   }
}
// whats different on this method on below
resultEmail.onAwait 
resultEmail.await()

请帮助我如何使用该功能,谢谢

android kotlin coroutine
2个回答
0
投票

onAwait
await()
都是处理异步操作结果的两种方法,但是:

onAwait
:用于指定当异步操作的结果可用时将调用的callback。它允许您使用结果执行某些操作或逻辑,而不会阻塞当前线程。
(在您的代码中,
resultEmail.onAwait
用于注册回调,当
resultEmail
异步操作的结果可用时将调用该回调。)

await()
:用于“挂起”当前协程,直到异步操作的结果可用。一旦完成,它就会返回操作结果。 (在您的代码中,resultEmail.await()
用于挂起协程,直到
resultEmail
异步操作的结果可用,然后
然后
检索结果。)


0
投票
onAwait

用于选择表达式。例如,您可以使用它来竞争两个不同的协程(例如

Deferred
和通道上生成的第一个值)。像这样:
suspend fun race(deferred: Deferred<String>, channel: ReceiveChannel<String>) {
    select<Unit> {
        deferred.onAwait { value ->
            println("Deferred finished first -> '$value'")
        }
        channel.onReceive { value ->
            println("Channel produced first -> '$value'")
        }
    }
}

© www.soinside.com 2019 - 2024. All rights reserved.