diz*_*iaq 6 suspend kotlin project-reactor kotlin-coroutines
假设我们有一个函数
suspend fun doSomething(value: Int): String {
delay(1000L)
return "abc_$value"
}
Run Code Online (Sandbox Code Playgroud)
如何将其转换为返回的函数Mono?在属于协程范围的线程和反应器事件循环线程之间切换是否存在任何隐藏问题?
fun resultAsMono(fn: suspend (Int) -> String): (Int) -> Mono<String> {
// ???
}
Run Code Online (Sandbox Code Playgroud)
那么效果会是这样的:
val newFn = resultAsMono(::doSomething)
val result = newFn(5).block()
assertThat(result).isEqualTo("abc_5")
Run Code Online (Sandbox Code Playgroud)
已经存在用于此转换的函数。你需要这种依赖...
<dependency>
<groupId>org.jetbrains.kotlinx</groupId>
<artifactId>kotlinx-coroutines-reactor</artifactId>
<version>1.6.0</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
...然后您可以执行以下操作:
import kotlinx.coroutines.delay
import kotlinx.coroutines.reactor.mono
fun main() {
val mono = mono { doSomething(5) }
val result = mono.block()
println(result)
}
suspend fun doSomething(value: Int): String {
delay(1000L)
return "abc_$value"
}
Run Code Online (Sandbox Code Playgroud)
就线程而言,您无需担心。Reactor 与并发无关,因此它可以很好地与 Kotlin 协程线程配合使用。
| 归档时间: |
|
| 查看次数: |
4123 次 |
| 最近记录: |