Kotlin(3)-协程和操作符重载,java技术经理

本文介绍了Kotlin中的协程和操作符重载。通过示例展示了如何使用协程处理异步任务,包括如何启动、取消协程以及设置超时。同时,文章解释了操作符重载的概念,提供了多个实例来说明如何为自定义类型重载一元和二元操作符,以简化代码并提高可读性。
摘要由CSDN通过智能技术生成

launch {
delay(1000)
finalRes = finalRes.plus(“1”)
}
launch {
delay(2000)
finalRes = finalRes.plus(“2”)
}

launch {
delay(3000)
finalRes = finalRes.plus(“3”)
}
}
finalRes
}

fun main() {
val test6 = test6()
println(“最终返回值是: $test6”)
}

最终返回结果为(延迟3秒之后打印):

最终返回值是: 123

  • 如果有一个函数,需要顺序执行多个网络请求,并且后一个请求依赖前一个请求的执行结果

import kotlinx.coroutines.*

suspend fun getToken(): String {
for (i in 0…10) {
println(“异步请求正在执行:getToken :$i”)
delay(100)
}
return “ask”
}

suspend fun getResponse(token: String): String {
for (i in 0…10) {
println(“异步请求正在执行:getResponse :$token $i”)
delay(100)
}

return “response”
}

fun setText(response: String) {
println(“setText 执行,时间: ${System.currentTimeMillis()}”)
}

fun main() {
GlobalScope.launch(Dispatchers.Unconfined) {
var token = GlobalScope.async(Dispatchers.Unconfined) {
return@async getToken()
}.await() // 创建异步任务,并且 阻塞执行 await 是阻塞执行取得结果

var response = GlobalScope.async(Dispatchers.Unconfined) {
return@async getResponse(token)
}.await() // 创建异步任务,并且立即执行

setText(response)
}

Thread.sleep(20000)
}

执行结果:

异步请求正在执行:getToken :0
异步请求正在执行:getToken :1
异步请求正在执行:getToken :2
异步请求正在执行:getToken :3
异步请求正在执行:getToken :4
异步请求正在执行:getToken :5
异步请求正在执行:getToken :6
异步请求正在执行:getToken :7
异步请求正在执行:getToken :8
异步请求正在执行:getToken :9
异步请求正在执行:getToken :10
异步请求正在执行:getResponse :ask 0
异步请求正在执行:getResponse :ask 1
异步请求正在执行:getResponse :ask 2
异步请求正在执行:getResponse :ask 3
异步请求正在执行:getResponse :ask 4
异步请求正在执行:getResponse :ask 5
异步请求正在执行:getResponse :ask 6
异步请求正在执行:getResponse :ask 7
异步请求正在执行:getResponse :ask 8
异步请求正在执行:getResponse :ask 9
异步请求正在执行:getResponse :ask 10
setText 执行,时间: 1578904290520

  • 当前正在执行一项异步任务,但是你突然不想要它执行了,随时可以取消

fun main() {
// 协程任务
val job = GlobalScope.launch(Dispatchers.IO) {
for (i in 0…100){// 每次挂起100MS,100次也就是10秒
println(“协程正在执行 $i”)
delay(100)
}
}

// 但是我在1秒之后就取消协程
Thread.sleep(1000)
job?.cancel()
println( “btn_right 结束协程”)
}

执行结果(本该执行100轮的打印,只持续了10轮):

协程正在执行 0
协程正在执行 1
协程正在执行 2
协程正在执行 3
协程正在执行 4
协程正在执行 5
协程正在执行 6
协程正在执行 7
协程正在执行 8
协程正在执行 9
btn_right 结束协程

Process finished with exit code 0

  • 如果你想让一个任务最多执行3秒,超过3秒则自动取消

import kotlinx.coroutines.*

fun main() = runBlocking {

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值