gpt4 book ai didi

kotlin - 如何使用runBlocking等待CoroutineScope完成

转载 作者:行者123 更新时间:2023-12-02 13:37:25 27 4
gpt4 key购买 nike

我正在尝试测试一个将自己声明为CoroutineScope的类。该类具有一些在其范围内用launch作业的方法,我必须从测试方法中断言这些作业的效果。

这是我尝试过的:

import kotlinx.coroutines.*

class Main : CoroutineScope {
override val coroutineContext get() = Job()

var value = 0

fun updateValue() {
this.launch {
delay(1000)
value = 1
}
}
}

fun main() {
val main = Main()
val mainJob = main.coroutineContext[Job]!!
main.updateValue()
runBlocking {
mainJob.children.forEach { it.join() }
}
require(main.value == 1)
}

我的期望是 updateValue()将在 coroutineContext中创建根作业的子级。但是事实证明 mainJob.children为空,所以我等不及完成 launch,并且 require语句失败。

使这项工作正确的方法是什么?

最佳答案

我的代码中的错误很简单:

override val coroutineContext get() = Job()

我不小心留下了一个自定义 setter/getter ,这意味着每次对 coroutineContext的访问都会创建一个新作业。自然,我在测试代码中找到的工作没有 child 。删除 get()可使代码正常工作:
override val coroutineContext = Job()

关于kotlin - 如何使用runBlocking等待CoroutineScope完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53277906/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com