Scala: возвращение из Runnable - PullRequest
0 голосов
/ 16 мая 2018

Я учу Scala.Я читаю программу Scala:

class MyProg() extends StrictLogging with Runnable {
  private val scheduledFuture = new AtomicReference[ScheduledFuture[_]]
  def start() = {
    scheduledFuture.set(executor.scheduleWithFixedDelay(this, initialDelaySeconds, intervalSeconds, TimeUnit.SECONDS))
  }

  def stop() = {
    Option(scheduledFuture.get()).map(_.cancel(true))
  }

  override def run() = try {
    process()
  } catch {
    case e: Exception => logger.warn("Error", e)
  }

  def process() :Unit {
    // do something
    if (condition) return // Line 203
    // do something else
  }
}

Еще один фрагмент кода для запуска Runnable:

Option(myProg).map(_.start)

Мои вопросы:

1, это правильновернуться изнутри Runnable?process() планируется запускать каждые intervalSeconds секунды.даже иногда process() возвращается изнутри, он все равно будет называться intervalSeconds секунд спустя.Я прав?

2, мы можем использовать System.exit(0) или throw new Exception("...") здесь?После вызова System.exit(0) или throw new Exception("..."), process() будет снова вызываться ?

3, кстати, почему def process() :Unit {}?Можем ли мы использовать def process() :Unit = {}

Любые комментарии приветствуются.Спасибо

1 Ответ

0 голосов
/ 17 мая 2018
  1. return из функции process, это не самый простой идиоматический способ, но это хорошо, а иногда это улучшает производительность / читаемость. scheduleWithFixedDelay Задержка находится между прекращением одного выполнения и началом следующего.
  2. System.exit (0) завершит работу jvm, поэтому после этого ничего не будет запущено.для исключения исключение зависит: если исключение выдается внутри функции process, оно будет перезапущено.Планировщик фактически запускает функцию run, которая перехватывает все исключения, выданные из process.
  3. def process() :Unit {} устарела и не должна использоваться.всегда используйте способ def process() :Unit = {}.

Этот код, кажется, преобразован из Java, и я не думаю, что это хорошая отправная точка для изучения scala.В любом случае, лучший способ научиться - это попробовать.Потратьте некоторое время, чтобы немного поиграть с ним.

...