【发布时间】:2021-03-19 18:51:10
【问题描述】:
我担心coroutines。我想做的是在完成几个请求后执行特定代码......在我使用completionHandlers并正常工作之前,问题是有更多请求,我不想嵌套它们,我认为这不是正确的做法......所以我不知道你是否对这个练习有任何建议。我提出以下建议,但我不确定它是否是最好的:
val job = viewLifecycleOwner.lifecycleScope.launch {
// API calls
Process1 (view)
Process2 (view)
Process3 (view)
Process4 (view)
}
runBlocking {
job.join ()
// Continue normally
}
感谢阅读!
附言。每个“进程”调用API 并以completionHandler 响应
【问题讨论】:
-
将您的流程函数转换为挂起函数。他们应该在后台线程上进行阻塞工作。然后您可以在调用它们后立即在协程内正常继续。要在后台线程上完成工作,您可以将阻塞工作包装在
withContext(Dispatchers.IO)中。如果您正在使用带有回调参数的 API,则可以使用suspendCoroutine将其转换为挂起函数。 -
你能给我举个例子吗?
-
协程设计负责人的这篇文章清楚地描述了挂起函数以及如何使用
withContext。 elizarov.medium.com/… -
非常有用!!非常感谢