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

  • Learning Concurrency in Kotlin
  • Miguel Angel Castiblanco Torres
  • 206字
  • 2021-08-05 10:46:52

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.

主站蜘蛛池模板: 冕宁县| 自治县| 临安市| 唐河县| 府谷县| 登封市| 麻栗坡县| 托克托县| 达州市| 宾川县| 葵青区| 长垣县| 揭西县| 平阳县| 偃师市| 望城县| 图木舒克市| 杂多县| 乌兰浩特市| 教育| 自治县| 巩留县| 安多县| 遂昌县| 阿荣旗| 五大连池市| 万山特区| 湘乡市| 舟曲县| 南靖县| 沾化县| 石景山区| 新乡县| 武宁县| 郧西县| 同江市| 赤水市| 凤城市| 瓮安县| 芦山县| 石景山区|