У меня есть Future
в Scala 2.11
, которым управляет рабочий актор в Akka. Будущее выполняется работником, и работник отчитывается перед центральным действующим лицом, чтобы сообщить об успехе/неуспехе и запросить дополнительную работу.
Фьючерсы, обрабатываемые работником, являются длительными, и вычисления могут занять до 15 минут в зависимости от сложности задачи. Существует 100% вероятность того, что развертывание может произойти в середине вычислений, и я просто позволю ему рухнуть. Однако мне нужно сделать небольшую очистку, поэтому я реализовал следующее sys.ShutdownHookThread
в будущем:
sys.ShutdownHookThread {
logger.info(s"Computation was killed mid-task for user ${set.userId}. Recovering state...")
closeProcessingState
}
Мой вопрос таков: если я зарегистрировал перехватчик выключения, отменит ли он сам себя, когда будущее будет завершено? Проверяя документы API, в описании говорится, что он «самоотменяет регистрацию», но, похоже, не указывает, что заставляет его отменять регистрацию.
По сути, если JVM выключается через несколько часов, я не хочу, чтобы работала тысяча перехватчиков выключения, потому что они не отменили регистрацию самостоятельно.