У меня есть программа scala, которая выполняется некоторое время, а затем завершается. Я хотел бы предоставить библиотеку этой программе, которая за кулисами планирует асинхронную задачу для запуска каждые N
секунд. Я также хотел бы, чтобы программа завершилась, когда работа точки входа main
была закончена, без необходимости явно указывать фоновое действие для закрытия (поскольку оно находится внутри библиотеки).Идиоматическое планирование фоновой работы, которая умирает с основным потоком в Scala
Как я могу сказать, что идиоматический способ сделать опрос или запланированную работу в Scala с помощью Akka's ActorSystem.scheduler.schedule
, но с помощью ActorSystem программа зависает после того, как main
ждет актеров. Затем я попробовал и не смог добавить еще одного актера, который join
s на основной нити, по-видимому, потому что "Anything that blocks a thread is not advised within Akka"
Я мог бы ввести пользовательский диспетчер; Я мог бы клонировать что-то вместе с опросом isAlive
или добавить аналогичную проверку внутри каждого работника; или я мог бы отказаться от Акки и просто использовать сырые потоки.
Это похоже на не слишком необычную вещь, которую хочется делать, поэтому я бы хотел использовать идиоматическую Scala, если есть лучший лучший способ.
Вы можете просто заблокировать основной поток, используя 'Await.result (whenTerminated, Duration.Inf)' и при необходимости завершите завершение работы системы с актера. –