Kotlin 取出来最快的协程数据

package com.example.kotlin_coroutine_channel

import com.google.gson.Gson
import kotlinx.coroutines.*
import kotlinx.coroutines.selects.select
import org.junit.Test
import java.io.File

private val cachePath =
    "H:\\develop\\project\\android\\learn\\kotlin_coroutine_channel\\app\\src\\test\\java\\com\\example\\kotlin_coroutine_channel\\coroutine.cache"
private val cachePath2 =
    "H:\\develop\\project\\android\\learn\\kotlin_coroutine_channel\\app\\src\\test\\java\\com\\example\\kotlin_coroutine_channel\\coroutine2.cache"
private val gson = Gson()


data class User(val name: String, val address: String)

data class Response<T>(val value: T, val isLocal: Boolean)

fun CoroutineScope.getUserFromLocal(name: String) = async(Dispatchers.IO) {
    delay(1000)
    File(cachePath).readText().let { gson.fromJson(it, User::class.java) }
}

fun CoroutineScope.getUserFromLocal2(name: String) = async(Dispatchers.IO) {
    delay(1100)
    File(cachePath2).readText().let { gson.fromJson(it, User::class.java) }

}

class CoroutineText0102 {

    @Test
    fun `test select await`() = runBlocking<Unit> {
        GlobalScope.launch {
            val localRequest = getUserFromLocal("a")
            val localRequest2 = getUserFromLocal2("a")

            val userResponse = select<Response<User>> {
                localRequest.onAwait { Response(it, isLocal = true) }
                localRequest2.onAwait { Response(it, isLocal = false) }
            }
            userResponse.value.let { println(it) }
            userResponse.let { println(it) }
        }.join()

    }
}
coroutine.cache

第一个本地文件

{"name":"Jack","address":"New York"}
coroutine2.cache
{"name":"Jack1","address":"New York"}

第一次运行

 让第一个更慢一点 那么久返回第二个的结果

 

 非常好用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

安果移不动

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值