Kotlin 取出来最快的协程数据

Posted 安果移不动

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 取出来最快的协程数据的主要内容,如果未能解决你的问题,请参考以下文章

译文kotlin1.3 版本的协程

day10:kotlin的协程已经安卓网络技术初步

为什么我放弃使用 Kotlin 中的协程?

超长文,带你全面了解Kotlin的协程

Kotlin 协程协程取消 ③ ( finally 释放协程资源 | 使用 use 函数执行 Closeable 对象释放资源操作 | 构造无法取消的协程任务 | 构造超时取消的协程任务 )

Kotlin 协程协程取消 ③ ( finally 释放协程资源 | 使用 use 函数执行 Closeable 对象释放资源操作 | 构造无法取消的协程任务 | 构造超时取消的协程任务 )