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

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.

主站蜘蛛池模板: 张家川| 姜堰市| 宿州市| 彭山县| 濉溪县| 富川| 略阳县| 青河县| 义乌市| 双鸭山市| 邳州市| 灵寿县| 永昌县| 连州市| 左权县| 旬邑县| 辽宁省| 德庆县| 成安县| 金湖县| 新野县| 和顺县| 漠河县| 辽宁省| 民勤县| 霍林郭勒市| 独山县| 石泉县| 禄丰县| 古丈县| 洞口县| 新安县| 柳河县| 天镇县| 巩留县| 康乐县| 资源县| 宜丰县| 垫江县| 渭源县| 资阳市|