Я пытаюсь записать истекшее время каждой задачи следующим образом.
Проблема, с которой я столкнулся, заключается в том, что метод обратного вызова в logElapsedTime никогда не вызывается по какой-либо причине.
Вызывается только самый последний обратный вызов в будущее f .
Как я могу исправить это, чтобы каждое прошедшее время было правильно зарегистрировано?
def logElapsedTime[T](f: Future[T], description: String): Future[T] = {
val start = System.currentTimeMillis()
f onComplete (_ => logger.debug(s"$description took [${System.currentTimeMillis() - start}]"))
f
}
val f = for {
_ <- logElapsedTime(task1(), "1st task to be executed")
result <- logElapsedTime(task2(), "2nd task to be executed")
_ <- logElapsedTime(task3(), "3rd task to be executed")
_ <- logElapsedTime(task4(), "4th task to be executed")
} yield result
f onComplete {
case Success(v) =>
logger.info(s"tasks succeeded !!!! $v")
case Failure(ex) =>
logger.error(ex.getMessage)
throw ex
}
Примеры выходных данных ↓
при успешном выполнении:
задание выполнено успешно !!!! некоторое значение
при ошибке:
некоторое сообщение об ошибке
Другие входы не регистрируются.
(Уровень журнала установлен на отладку и выше)