小编tof*_*for的帖子

channelFlow 和 callbackFlow 有什么区别

我试图理解为什么我们需要 callbackFlow builder,它似乎与 channelFlow 几乎相同,除了 callbackFlow 是内联的。用例是什么?

kotlin-coroutines

10
推荐指数
1
解决办法
2046
查看次数

Kotlin Coroutines异步等待序列

能否请您解释一下这两段代码之间的区别.第一次打印421,但第二次打印606.为什么第一个是平行的而第二个是顺序的?

fun main(args: Array<String>) = runBlocking {

    var time = measureTimeMillis {
        val one = async { one() }
        val two = async { two() }
        val int1 = one.await()
        val int2 = two.await()
        println(int1 + int2)

    }

    println(time)


    time = measureTimeMillis {
        val one = async { one() }.await()
        val two = async { two() }.await()
        println(one + two)

    }

    print(time)
}

suspend fun one(): Int {
    delay(200)
    return 12
}

suspend fun two(): Int {
    delay(400)
    return 23 …
Run Code Online (Sandbox Code Playgroud)

coroutine kotlin kotlin-coroutines

5
推荐指数
3
解决办法
5763
查看次数

CoroutineScope - CompletableDeferred 取消

关于这个话题我有两个问题。我将在 android 中使用这些用例类,并尝试实现类似于此的架构https://www.youtube.com/watch?v=Sy6ZdgqrQp0 但我需要一些答案。

1)我有一个延迟的异步构建器,当我取消作业时,其他链也被取消。此代码打印“呼叫已取消”。但我不确定我做得是否正确。

fun main(args: Array<String>) = runBlocking<Unit> {
    val job = GlobalScope.launch {
        println(getUser())
    }
    job.cancelAndJoin()
}

suspend fun getUser() = getUserDeferred().await()


suspend fun getUserDeferred() = coroutineScope {

    val request = Request.Builder()
            .url("https://jsonplaceholder.typicode.com/users")
            .build()

    val call = OkHttpClient().newCall(request)

    val deferred = async(Dispatchers.IO) {
        val body = call.execute()
        body.body()?.string() ?: ""
    }

    deferred.invokeOnCompletion {
        if (deferred.isCancelled) {
            println("Call cancelled")
            call.cancel()
        }
    }
    deferred
}
Run Code Online (Sandbox Code Playgroud)

2)我找不到取消这个的方法。我想在retrofit2调用适配器中使用它,有没有更好的方法来处理这种情况。

fun main(args: Array<String>) = runBlocking<Unit> {
    val job = GlobalScope.launch {
        println(getUser1()) …
Run Code Online (Sandbox Code Playgroud)

android kotlin kotlin-coroutines

4
推荐指数
1
解决办法
6368
查看次数

Android体系结构组件-从房间中删除旧数据

目前,我正在研究Android应用架构,我无法理解Github Repo Sample中的一件事。我们可以决定使用速率限制器或null检查来获取新数据,但是在这种情况下,我们只是将新值插入数据库中,而不会从数据库中删除旧值。例如,如果数据库中的旧结果之一从服务器中删除(用户删除的存储库)?它将仍在数据库中吗?我们如何消除这些价值?我是否缺少某些东西,或者这是未处理的案件?

android android-room android-architecture-components

2
推荐指数
1
解决办法
2034
查看次数