Kotlin平行流

insrf1ej  于 2023-01-31  发布在  Kotlin
关注(0)|答案(1)|浏览(123)

如何像java中的parallel()一样设置流来异步运行操作?

IntStream.range(0, size)
                .boxed()
                .parallel()
                .map(this::doSomethingLong)
                .collect(Collectors.toList())

我想在flow中异步执行一些长操作

polhcujo

polhcujo1#

在您的情况下,您可以这样做:

// Perform everything on a background thread using flowOn operator
fun simple(size: Int): Flow<Int> = flow {
    for (i in 0..size) {
        emit(i)
    }
}.transform { it ->
    emit(doSomethingLong(it))
}.flowOn(Dispatchers.Default)

fun main() {
    runBlocking {
        simple().collect { it ->
            println(it) // Collect on main thread
        } 
    }
}

注意,收集发生在调用协程的上下文中,因此,如果你想在不同的线程上进行收集,你可以指定它,例如,如下所示

withContext(Dispatchers.Main) {
    simple().collect { ... }
}

相关问题