【问题标题】:vertx-lang-kotlin-coroutines understandingvertx-lang-kotlin-coroutines 理解
【发布时间】:2020-06-20 14:12:52
【问题描述】:

这将是一个非常基本的问题,但我无法理解。我正在阅读有关 kotlin 协程与 Vertx 平台 (here) 的集成的信息,并遇到以下代码 sn-p。

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 事件循环的协程。

awaitEvent 函数暂停协程的执行,直到 计时器触发并使用之前的值恢复协程 交给处理程序。

关于处理程序、事件和 事件流。

现在我的问题是handler 的用途是什么?它的类型是什么?

【问题讨论】:

    标签: kotlin vert.x kotlin-coroutines


    【解决方案1】:

    Vert.x 中的许多异步操作都将Handler&lt;T&gt; 作为最后一个参数。 vertx.setTimer() 是这样的异步函数之一,它在定时器触发时调用 handler。根据docs of Vertx.setTimer() method,它接受handler: Handler&lt;Long&gt; 作为第二个参数。我们可以得出结论,Handler&lt;T&gt; 的泛型类型是Long

    Suspend 函数awaitEvent 将 lambda 块作为参数,反过来接收 Handler&lt;T&gt; 类型的参数。根据docs

    该块使用Handler&lt;T&gt; 参数执行,该参数应被调用一次。 调用处理程序时,awaitEvent 返回处理程序接收到的值。

    因此,当将handler 传递给vertx.setTimer(1000, handler) 函数时,它会在延迟(1000 毫秒)过去后调用handler,而awaitEvent 函数又会返回处理程序接收到的值(计时器ID)。

    【讨论】:

      猜你喜欢
      • 2020-05-29
      • 2019-04-10
      • 2020-07-08
      • 2019-11-28
      • 2020-10-15
      • 2019-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多