У меня есть класс, у которого есть собственный внутренний поток, выполняющийся над очередью действий, он просто циклически выполняет все время. Для этого он читает очередь уведомлений, которые сообщают ему, что делать дальше. Есть уведомление, чтобы сказать классу прекратить все действия и убить себя. Когда другой поток вызывает уведомление notifyClose, оно добавляется в очередь и получает приоритет 1. Я хочу, чтобы метод, добавляющий уведомление, возвращал Future.success, когда другой поток обработал уведомление о закрытии.
код выполняется следующим образом:
def loop(): Future[Unit] = {
current = if(queue.contains(KILL)) disable() // <--- disable will set the state to Closed
else process() // <--- if queue is empty it will call loop(),
// if its not empty it will do de action and then call loop()
}
private def disable(): Future[Unit] = {
state = Closed
Future.unit
}
def close(): Future[Unit] = {
queue.add(KILL)
while (state != Closed) { /* Wait until state is NotAvailable */ }
Future.successful()
}
Я хочу лучше подождать, пока состояние изменится на Closed в методе close()
. Я заполняю это, и пустое l oop является худшей идеей.
Переменный ток содержит текущее обрабатываемое будущее, может быть, есть какой-нибудь способ привязать мой результат к этому будущему? Дело в том, что я не знаю, когда метод disable()
действительно запустится. Мы будем благодарны за любую помощь.
Спасибо, что нашли время для чтения.