官术网_书友最值得收藏!

Active

A job in the state new can be started in many ways, but commonly it will be done by calling start() or join(), the difference being that the former will start the job without waiting for it to complete, whereas the latter will suspend execution until the job completes. Take this example into consideration:

fun main(args: Array<String>) {
val job = launch(start = CoroutineStart.LAZY) {
delay(3000)
}

job.start()
}

The mentioned code will not suspend execution when job.start() is invoked, so the application will complete its execution without waiting for job to complete.

Since start() doesn't suspend execution, it doesn't need to be called from a suspending function or coroutine. It can be called from any part of our application.

If we use join(),we will force the application to wait for job to complete, as demonstrated:

fun main(args: Array<String>) = runBlocking {
val job = launch(start = CoroutineStart.LAZY) {
delay(3000)
}

job.join()
}
As  join() can suspend execution, it needs to be called from a coroutine or a suspending function. Note that runBlocking() is being used for that.

Any job that has been started is therefore active, and it will be active until it completes execution or until cancellation is requested.

主站蜘蛛池模板: 梅州市| 望谟县| 延长县| 方城县| 嘉祥县| 凤城市| 灵石县| 曲水县| 礼泉县| 康定县| 安陆市| 孙吴县| 城步| 紫金县| 巴林左旗| 黄龙县| 新昌县| 黄骅市| 安乡县| 黑山县| 开原市| 沾益县| 彰武县| 汉川市| 汶川县| 太保市| 东兰县| 博乐市| 临夏市| 临西县| 南靖县| 连州市| 三河市| 尖扎县| 施甸县| 陆河县| 万载县| 漳州市| 海门市| 丰镇市| 满城县|