- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想暂停一个kotlin协程,直到从外部调用一个方法为止,就像旧的Java object.wait()和object.notify()方法一样。我怎么做?
在这里:Correctly implementing wait and notify in Kotlin是如何使用Kotlin线程(阻塞)实现此目标的答案。在这里:Suspend coroutine until condition is true是如何使用CompleteableDeferreds做到这一点的答案,但我不想每次都必须创建一个新的CompleteableDeferred实例。
我目前正在这样做:
var nextIndex = 0
fun handleNext(): Boolean {
if (nextIndex < apps.size) {
//Do the actual work on apps[nextIndex]
nextIndex++
}
//only execute again if nextIndex is a valid index
return nextIndex < apps.size
}
handleNext()
// The returned function will be called multiple times, which I would like to replace with something like notify()
return ::handleNext
最佳答案
Channels可以用于此目的(尽管它们更通用):
When capacity is 0 – it creates RendezvousChannel. This channel does not have any buffer at all. An element is transferred from sender to receiver only when send and receive invocations meet in time (rendezvous), so send suspends until another coroutine invokes receive and receive suspends until another coroutine invokes send.
val channel = Channel<Unit>(0)
channel.receive()
表示
object.wait()
,并使用
channel.offer(Unit)
表示
object.notify()
(如果要等到其他协程
send
,则使用
receive
)。
notifyAll
,可以改为使用
BroadcastChannel
。
inline class Waiter(private val channel: Channel<Unit> = Channel<Unit>(0)) {
suspend fun doWait() { channel.receive() }
fun doNotify() { channel.offer(Unit) }
}
关于kotlin - 如何在通知之前暂停Kotlin协程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55421710/
在我的设置中,我试图有一个界面 Table继承自 Map (因为它主要用作 map 的包装器)。两个类继承自 Table - 本地和全局。全局的将有一个可变的映射,而本地的将有一个只有本地条目的映射。
Rust Nomicon 有 an entire section on variance除了关于 Box 的这一小节,我或多或少地理解了这一点和 Vec在 T 上(共同)变体. Box and Vec
我是一名优秀的程序员,十分优秀!