IIR C нет встроенных функций для проверки таймера, если он завершил все задачи.
Единственное, что вы можете сделать, - это создать функцию расширения, которая может рассчитывать на это.
fun Timer.schedule(delay: Long, counter: AtomicInteger, task: TimerTask.() -> Unit) {
counter.incrementAndGet()
schedule(object : TimerTask{
override fun run() {
task()
counter.decrementAndGet()
}
}, delay)
}
Теперь вызовите расписание, передав AtomicInteger.
val timer = Timer()
val counter = AtomicInteger(0)
timer.schedule(1_000L, counter) {
Timber.d("task1")
}
timer.schedule(3_000L, counter) {
Timber.d("task2")
}
// check somewhere
val remaining = counter.get()
if (remaining == 0) {
// timer has finished all the tasks
} else {
// timer has tasks remaining
println("Timer has $remaining tasks")
}
Однако основным недостатком этого синтетического c сахара является то, что если вы используете фактический Timer.schedule
, определенный в классе , то у вас нет возможности определить, сколько задач осталось в живых. Поскольку std-lib в любом случае не реализует эту функциональность.