Как определить, выполнил ли мой таймер все задачи? - PullRequest
2 голосов
/ 09 мая 2020

У меня есть Google это, тогда как все ответы, которые я получил, просто проверяют, что только одно запланированное задание выполнено. Я хочу проверить, все ли задачи завершены или таймер простаивает? Есть ли хороший способ справиться с этим?

   val timer =Timer()
        timer.schedule(object:TimerTask(){
            override fun run() {
                Timber.d("task1")
            }
        },1000)

        timer.schedule(object:TimerTask(){
            override fun run() {
                Timber.d("task2")
            }
        },3000)

1 Ответ

1 голос
/ 09 мая 2020

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 в любом случае не реализует эту функциональность.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...