измените свой запуск конструктора сопрограмм на
this.launch(start = CoroutineStart.LAZY)
и измените инициализацию объекта задания на прямую
override val coroutineContext : Job = Job()
, и это должно дать желаемый результат
вотПример, который я попробовал, дает желаемый результат
import kotlinx.coroutines.*
import kotlin.coroutines.CoroutineContext
class Main : CoroutineScope {
val scope: CoroutineScope = this
override val coroutineContext = Job()
//Dispatchers.Default +
var value = 0
fun updateValue(csc : CoroutineScope) {
csc.launch(context = coroutineContext, start = CoroutineStart.LAZY) { println(this.coroutineContext[Job]!!.toString() + " job 2") }
csc.launch (context = coroutineContext, start = CoroutineStart.LAZY){ println(this.coroutineContext[Job]!!.toString() + " job 3") }
csc.launch (start = CoroutineStart.LAZY){
println(this.coroutineContext[Job]!!.toString() + " job 1")
//delay(1000)
value = 1
}
}
fun something() {
launch (start = CoroutineStart.LAZY){
println(this.coroutineContext[Job]!!.toString() + " something 1")
}
launch (start = CoroutineStart.LAZY){
println(this.coroutineContext[Job]!!.toString() + " something 2")
}
launch(start = CoroutineStart.LAZY) {
println(this.coroutineContext[Job]!!.toString() + " something 3")
delay(2000)
value = 1
}
}
}
fun main() {
val main = Main()
val mainJob = main.coroutineContext[Job]!!
main.updateValue(main.scope)
//main.something()
runBlocking {
//println(mainJob.children.count())
println(mainJob.children.count())
mainJob.children.forEach {
//println("in run blocking")
println(it.toString())
it.join()
}
}
println(main.value)
}
`