kotlin 专栏

2020-11-22

kotlin

异步

suspend 可与 async 使用,最后等待 await 返回。

launch 类似于 thread,使用 job.join(), 等待执行完成。

runBlocking 可以等待整个代码块的异步完成。

如何达到 promise.all 的效果, 并发请求返回写入 chunk 中。 为什么之前写失败了,第一种情况开了多个线程,并发请求了,但是无阻塞进入程序结束。第二种情况多个线程顺序阻塞完成,无并发情况。既要保证异步代码块还未结束时,程序不结束,也要保证并发异步执行。

    runBlocking {
        for (i in 1..11) {
            launch {
                requestStarPage(i)?.let {
                    a = a.plus(it)

                    write.append(a?.joinToString(separator = "\n") { it.name })
                    write.flush()
                }
            }
        }
    }

class Scheduler(private val task: Runnable) {
    private val executor = Executors.newScheduledThreadPool(1)!!

    fun scheduleExecution(every: Every) {

        val taskWrapper = Runnable {
            task.run()
        }

        executor.scheduleWithFixedDelay(taskWrapper, every.n, every.n, every.unit)
    }


    fun stop() {
        executor.shutdown()

        try {
            executor.awaitTermination(1, TimeUnit.HOURS)
        } catch (e: InterruptedException) {
        }

    }
}

data class Every(val n: Long, val unit: TimeUnit)

kotlin 自动任务

fun doIt(f: String) {
    val json = Json(JsonConfiguration(isLenient = true))
    val reposType = json.parse(ReposTypeElement.serializer().list, f)

    reposType.forEach { a -> println(a.id) }
}

使用 import kotlinx.serialization.* 时 加齐 gradle 配置, 不仅仅是依赖

sequences

copyright ©2019-2024 shenzhen
粤ICP备20041170号-1