首页 > 解决方案 > Koltin 流 - 单个任务的异常处理

问题描述

最近在探索 Kotlin Flows 时,我尝试实现一个功能,我想在其中运行 10 个任务作为 Flows 的一部分。我无法弄清楚的一件事是如何处理异常并重试单个任务。

这是相同的示例伪代码。

listOfOperations.asFlow().map {
    // Do request here (this would throw exception for some operations
}.collect {
    // Do something with output
}

现在我正在寻找的是如何为可能失败的操作之一添加重试机制。而不是重新启动整个流程。

我看到retryWhen可以用。但这最终重新启动了整个流程。

标签: androidkotlinkotlin-coroutines

解决方案


假设listOfOperations是一些输入数据列表......为什么不创建“子流”,使用retry然后展平结果流?

listOf("a", "b").asFlow().map { data ->
    flow {
        emit(someOperation(data)
    }.retry(3)
}.flattenConcat()

推荐阅读