Ped*_*rim 19 kotlin kotlin-coroutines
我正在使用下面的脚本创建一个协程:
fun bar(completion: () -> Unit) {
GlobalScope.launch(Dispatchers.IO) {
val lambda = {
withContext(Dispatchers.Main) { //Suspension functions can be called only within coroutine body
completion()
}
}
foo(lambda)
}
}
fun foo(lambda: () -> Unit) {
//...do something heavy
lambda()
}
Run Code Online (Sandbox Code Playgroud)
但是Suspension functions can be called only within coroutine body当我调用时出现错误,withContext(Dispatchers.Main)因为 lambda 更改了上下文。我无法更改foo(lambda: () -> Unit)为,foo(lambda: suspend () -> Unit)因为它来自外部库。
知道我可以withContext(Dispatchers.Main)在launch上下文中创建的 lambda 内部调用什么吗?
谢谢!
你可以bar像这样重写你的函数:
fun bar(completion: () -> Unit) {
GlobalScope.launch(Dispatchers.IO) {
suspendCoroutine<Unit> {
val lambda = {
it.resume(Unit)
}
foo(lambda)
}
withContext(Dispatchers.Main) {
completion()
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14633 次 |
| 最近记录: |