我正在尝试轮询分页 API 并在用户出现时向用户提供新项目。
fun connect(): Sequence<T> = buildSequence {
while (true) {
// result is a List<T>
val result = dataSource.getFirstPage()
yieldAll(/* the new data in `result` */)
// Block the thread for a little bit
}
}
这是示例用法:
for (item in connect()) {
// do something as each item is made available
}
我的第一个想法是使用该delay
功能,但我收到以下消息:
受限挂起函数只能在其受限协程范围内调用成员或扩展挂起函数
这是签名buildSequence
:
public fun <T> buildSequence(builderAction: suspend SequenceBuilder<T>.() -> Unit): Sequence<T>
我认为这条消息意味着我只能使用suspend
SequenceBuilder: 中的函数,yield
并且不允许yieldAll
使用任意函数调用。suspend
现在我正在使用它来阻止每次轮询 API 后一秒钟的序列构建:
val resumeTime = System.nanoTime() + TimeUnit.SECONDS.toNanos(1)
while (resumeTime > System.nanoTime()) {
// do nothing
}
这行得通,但它似乎真的不是一个好的解决方案。有没有人遇到过这个问题?