Kotlin是否有可能在一段时间内在协同程序中调用函数async(),在时间完成后会返回默认结果?
我发现只能调用await,而无限等待结果.
async {
...
val result = computation.await()
...
}
Run Code Online (Sandbox Code Playgroud)
但是真实的生产情况比你需要返回默认结果或异常.什么是在Kotlin协同程序中做某事的正确方法?像这样的东西:
async {
...
val timeout = 100500
val result: SomeDeferredClass = computation.await(timeout)
if (result.isTimeout()) {
// get default value
} else {
// process result
}
...
}
Run Code Online (Sandbox Code Playgroud)
mar*_*ran 12
你可以使用withTimeout-function.CancellationException当它超时时它会抛出一个.您可以捕获此异常并返回默认值.
像这样的东西:
async {
...
val timeout = 100500L
try {
withTimeout(timeout) {
computation.await()
}
...
} catch (ex: CancellationException) {
defaultValue
}
}
Run Code Online (Sandbox Code Playgroud)
你也可以使用withTimeoutOrNull-function,它null在超时时返回.像这样:
async {
...
val timeout = 100500L
withTimeoutOrNull(timeout) { computation.await() } ?: defaultValue
}
Run Code Online (Sandbox Code Playgroud)
这种方法不允许您区分超时和返回null的计算.在两种情况下都将返回默认值.
有关详细信息,请参阅此处:https://github.com/Kotlin/kotlinx.coroutines/blob/master/coroutines-guide.md#timeout
| 归档时间: |
|
| 查看次数: |
3733 次 |
| 最近记录: |