我需要执行4个并行请求。下面是我的代码:
suspend fun fetchAsyncData() = coroutineScope {
val first = async { repository.taskFirst() }
val second = async { repository.taskSecond() }
val third = async { repository.taskThird() }
val fourth = async { repository.taskFourth() }
val firstResult = first.await()
val secondResult = second.await()
val thirdResult = third.await()
val fourthResult = fourth.await()
}
字符串
问题是,使用这种方法,请求是并行执行的,但我可以同时得到答案。也就是说,如果有些请求将执行45秒,有些将执行3秒,那么我将只能在45秒后处理请求的结果。我的任务是,一旦接收到第一个请求的响应,就将其传递给视图模型,这样它就可以在片段中显示这段数据。此外,一旦接收到对请求的另一个响应,就再传输一个数据,依此类推。
这是怎么做到的,请帮助我。
4条答案
按热度按时间g0czyy6m1#
也许这样的东西可以为你工作:
字符串
e7arh2l62#
如果所有的任务返回相同的结果,那么您可以创建一个流并异步地向其发送数据。下面是一个例子:
字符串
但是如果
tasks
返回不同的数据,那么您可以创建多个flow
,并在每个任务返回时发送数据。ar7v8xwq3#
通过这种方法,您可以处理不同类型的响应和失败案例。
字符串
oo7oh9g94#
你应该使用异步后的每一行代码。示例:
字符串
调用fetchAsyncData()函数:
型