1

我想在超时或满足某些特定条件后执行特定功能。我在 swift usingDispatchWorkItem和 used中做了同样的事情

dispatchQueue?.asyncAfter(deadline: .now() + .seconds(10), execute: self.dispatchWorkItemForDevicesDiscovery!) 

启动计时器并在 10 秒后执行相关的 disptachWorkItem。

如何在 Kotlin 中做到这一点?

4

1 回答 1

1

为此,您可以使用 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>

进一步阅读

于 2019-01-21T22:25:55.190 回答