Код A получает результат A, а код B - результат B.
1: являются ли сопрограммы fun foo()
? почему он не добавляет ключевое слово suspend
раньше, если это функция сопрограмм?
2: На мой взгляд, функция сопрограмм запускается с использованием launch {...}
или aync {...}
, если fun foo()
является функцией сопрограмм почему main()
удовольствие в коде B может вызывать его напрямую?
3: в чем различия между кодом A и кодом B?
код A
fun main() = runBlocking<Unit> {
launch {
for (k in 1..3) {
println("I'm not blocked $k")
delay(100)
}
}
launch {
foo().collect { value -> println(value) }
}
}
fun foo(): Flow<Int> = flow {
for (i in 1..3) {
delay(100)
emit(i+5)
}
}
Результат A
I'm not blocked 1
I'm not blocked 2
6
I'm not blocked 3
7
8
Код B
fun main() = runBlocking<Unit> {
launch {
for (k in 1..3) {
println("I'm not blocked $k")
delay(100)
}
}
foo().collect { value -> println(value) }
}
fun foo(): Flow<Int> = flow {
for (i in 1..3) {
delay(100)
emit(i+5)
}
}
Результат B
I'm not blocked 1
6
I'm not blocked 2
7
I'm not blocked 3
8