vertx-lang- kotlin -coroutines понимание - PullRequest
0 голосов
/ 20 июня 2020

Это был бы очень простой c вопрос, но я не могу понять. Я читаю об интеграции kotlin сопрограмм с платформой Vertx ( здесь ) и сталкиваюсь с приведенным ниже фрагментом кода.

val vertx = Vertx.vertx()

GlobalScope.launch(vertx.dispatcher()) {
  val timerId = awaitEvent<Long> { handler ->
    vertx.setTimer(1000, handler)
  }
  println("Event fired from timer with id $timerId")
}

, и это определение со страницы

vertx.dispatcher () возвращает диспетчер сопрограмм, который выполняет сопрограммы с использованием события Vert.x l oop.

Функция awaitEvent приостанавливает выполнение сопрограммы до срабатывания таймера и возобновляет сопрограммы со значением, которое было передано обработчику.

Более подробная информация об обработчиках, событиях и потоках событий приводится в следующих разделах.

Теперь мой вопрос какова цель handler и что это за тип?

1 Ответ

0 голосов
/ 20 июня 2020

Многие асинхронные операции в Vert.x принимают Handler<T> в качестве последнего аргумента. vertx.setTimer() - одна из таких асинхронных функций, она вызывает handler при срабатывании таймера. Согласно документам Vertx.setTimer() метода он принимает handler: Handler<Long> в качестве второго параметра. Мы можем заключить, что generi c тип Handler<T> равен Long.

Suspend function awaitEvent принимает лямбда-блок в качестве параметра, который, в свою очередь, получает параметр типа Handler<T>. Согласно docs :

Блок выполняется с аргументом Handler<T>, который должен вызываться один раз. Когда вызывается обработчик, awaitEvent возвращает значение, полученное обработчиком.

Таким образом, при передаче handler функции vertx.setTimer(1000, handler) он вызывает handler после задержки (1000 миллисекунд) истекло, а функция awaitEvent, в свою очередь, возвращает значение, полученное обработчиком (идентификатор таймера).

...