【发布时间】:2020-02-23 21:34:30
【问题描述】:
我是协程的新手,我正在尝试了解是否/如何利用它们来执行以下操作:
- 开始监听事件(例如,键盘输入)
- 如果有事件到来,就对其做出反应(做某事)
- 如果在 n 秒内没有事件到达,则执行其他操作
我在想我可能需要将超时设置为事件本身。但是我很难理解这些东西。执行上述操作的简单示例将非常有启发性。
【问题讨论】:
标签: kotlin jvm coroutine kotlin-coroutines
我是协程的新手,我正在尝试了解是否/如何利用它们来执行以下操作:
我在想我可能需要将超时设置为事件本身。但是我很难理解这些东西。执行上述操作的简单示例将非常有启发性。
【问题讨论】:
标签: kotlin jvm coroutine kotlin-coroutines
您可以使用Kotlin' own timeout functionality。
val result = withTimeoutOrNull(timeoutInMillis) {
var event = getKeybouardEvent()
while(event == null) {
event = getKeybouardEvent()
}
return event
}
if(result == null) doThis() else doThat()
【讨论】:
do { ...} while (result != null) 循环中,但这是要走的路吗?它会在处理完每个事件后启动一个新的协程,因此不确定那里是否没有不必要的开销。
getKeyboardEvent 在这种情况下会是一个挂起函数,对吧?
while 循环就没有必要了。当你举这个例子时,你脑子里有没有忙着投票?