我想在超时或满足某些特定条件后执行特定功能。我在 swift usingDispatchWorkItem
和 used中做了同样的事情
dispatchQueue?.asyncAfter(deadline: .now() + .seconds(10), execute: self.dispatchWorkItemForDevicesDiscovery!)
启动计时器并在 10 秒后执行相关的 disptachWorkItem。
如何在 Kotlin 中做到这一点?
我想在超时或满足某些特定条件后执行特定功能。我在 swift usingDispatchWorkItem
和 used中做了同样的事情
dispatchQueue?.asyncAfter(deadline: .now() + .seconds(10), execute: self.dispatchWorkItemForDevicesDiscovery!)
启动计时器并在 10 秒后执行相关的 disptachWorkItem。
如何在 Kotlin 中做到这一点?
为此,您可以使用 Kotlin 的协程。您可以创建自己的挂起函数,该函数在任意时间 x 时间内检查给定条件。
suspend fun startConditionally(checkDelayMillis: Long = 10, condition: () -> Boolean, block: () -> Unit) {
while (true) {
if (condition()) { break }
delay(checkDelayMillis)
}
block()
}
fun main() {
var i = 0
// make the condition be fullfilled after 1 sec.
GlobalScope.launch {
delay(1000)
i = 1
}
GlobalScope.launch {
startConditionally(condition = {
i == 1
}) {
println("Hello")
}
}
Thread.sleep(2000L) // block main thread for 2 seconds to keep JVM alive
}
您将需要添加一个依赖项,因为协程不是标准库的一部分。
这是您需要放入 pom.xml 的内容(对于 Maven):
<dependency>
<groupId>org.jetbrains.kotlinx</groupId>
<artifactId>kotlinx-coroutines-core</artifactId>
<version>1.1.0</version>
</dependency>
此外,您需要激活它们:
<plugin>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-maven-plugin</artifactId>
...
<configuration>
<args>
<arg>-Xcoroutines=enable</arg>
</args>
</configuration>
</plugin>