我想制作两个进程守护进程,例如aGroup和bGroup。
但是,当aGroup没有dealy
时,bGroup从未启动
谁能告诉我为什么会这样?以及使协程程序永久运行的守护程序的最佳方法是什么。
谢谢
@Test
fun `test`() {
runBlocking {
val one = async(start = CoroutineStart.LAZY) {
while (true) {
runAGroup();
}
}.start()
(1..10).forEach {
async(start = CoroutineStart.LAZY) {
while (true) {
runBGroup(it)
}
}.start()
}
}
}
suspend fun runAGroup() {
println("[AGroup] Main")
// delay(1000L) <--- here
}
suspend fun runBGroup(name: Int) {
println("[BGrouop] $name (1000L)")
delay(1000L)
}
答案 0 :(得分:1)
runBlocking
使用事件循环在协程之间进行调度。由于您的runGroupA
运行无间断,因此没有其他协程运行的机会。
如果您指定其他分派器,例如Dispatchers.Default
,您还将看到其他协程也运行。
runBlocking(Dispatchers.Default) {
val one = async(start = CoroutineStart.LAZY) {
while (true) {
runAGroup();
}
}.start()
(1..10).forEach {
async(start = CoroutineStart.LAZY) {
while (true) {
runBGroup(it)
}
}.start()
}
}