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 配置, 不仅仅是依赖