foreach科特林等待间隔跟随流程

时间:2020-04-18 16:38:59

标签: kotlin timer

有人可以在以下方面帮助我: 我有一个FOR,里面有一些计时器

我的意图是,最初它为第一个索引运行TIMER,并且只有在取消计时器之后,该方法才转到下一个计时器。我的FOR需要等待TIMER完成。

/plugins

我的输出

/src

我希望我的输出是

for (i in 1..3) {
    println("running for loop: $i")

    val interval: Long = 60 * 1000 * 1 // 1 minute
    val timer = Timer("timer: $i", true)
    timer.schedule(100, interval) {
        println("${LocalTime.now()} to loop: $i")
        // some logic here do stop the timer
        // if (something happens) timer.cancel()
    }
}

1 个答案:

答案 0 :(得分:1)

我有一个FOR,里面有一些计时器

此语句是错误的,java.util.Timer是一个实用程序类,可用于安排将来某个时间执行的线程。

closeAddModal = (el) => {
    console.log(el.target.getAttribute('name'))
    this.setState({
        addAppModal: false
    })

    var layouts = this.state.layouts;

    layouts.lg.push({ i: 'b', x: 6, y: 0, w: 6, h: 6.45 })
    // layouts.md.push({i: 'b', x:6, y:0, w:5, h:4.35})

    this.setState({
        layouts: layouts
    }, () => {
        console.log(this.state.layouts)


    }
    )
}

上面的行没有阻塞for循环,计时器计划在线程上运行,并且for循环继续进行下一次迭代。


您可能需要一个阻塞解决方案来逐个执行它们

timer.schedule(100, interval) {}

但这可能不是最佳实践,因为您的线程刚刚被阻塞,您可以使用协程来做到这一点,而不会通过阻塞线程而浪费您的系统资源:

for (i in 1..3) {
    println("running for loop: $i")

    val interval: Long = 60 * 1000 * 1 // 1 minute
    Thread.sleep(100)
    var isRunning = true
    while(isRunning) {
        println("${LocalTime.now()} to loop: $i")
        Thread.sleep(interval)
        // some logic here do stop the timer
        // if (something happens) isRunning = false
    }
}