0
点赞
收藏
分享

微信扫一扫

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"}

第一次运行

Kotlin 取出来最快的协程数据_User

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

Kotlin 取出来最快的协程数据_java_02

 

Kotlin 取出来最快的协程数据_Test_03

 非常好用

举报

相关推荐

0 条评论