【问题标题】:I need to migrate Kotlin Corotine experimental functions to stable version我需要将 Kotlin Corotine 实验功能迁移到稳定版本
【发布时间】:2020-05-11 08:55:03
【问题描述】:

我想将现有的 Android 应用迁移到最近的协程版本。任何人都可以帮助重写这个 Kotline 协程函数。我需要这些函数 launchAsync async 和 asyncAwait 函数,正如它在我的视图模型中描述的那样。

package com.xx.xxx.xxxx.

import kotlinx.coroutines.experimental.CommonPool
import kotlinx.coroutines.experimental.CoroutineScope
import kotlinx.coroutines.experimental.Deferred
import kotlinx.coroutines.experimental.Job
import kotlinx.coroutines.experimental.android.UI
import kotlinx.coroutines.experimental.async
import kotlinx.coroutines.experimental.launch

fun launchAsync(block: suspend CoroutineScope.() -> Unit): Job {
    return launch(UI) { block() }
}

suspend fun <T> async(block: suspend CoroutineScope.() -> T): Deferred<T> {
    return async(CommonPool) { block() }
}

suspend fun <T> asyncAwait(block: suspend CoroutineScope.() -> T): T {
    return async(block).await()
}

谢谢

【问题讨论】:

    标签: android kotlin mvvm kotlin-coroutines


    【解决方案1】:

    这是我现在使用的代码。在@Marko的帮助下,分享给其他人使用。

    fun launchAsync(block: suspend CoroutineScope.() -> Unit): Job {
        return GlobalScope.launch(Dispatchers.Main) { block() }
    }
    
    suspend fun <T> async(block: suspend CoroutineScope.() -> T): Deferred<T> {
        return GlobalScope.async(Dispatchers.Default) { block() }
    }
    
    suspend fun <T> asyncAwait(block: suspend CoroutineScope.() -> T): T {
        return async(block).await()
    }
    

    有什么补充吗?马尔科?

    【讨论】:

      【解决方案2】:

      这些是直译:

      launch(UI) { block() } -> GlobalScope.launch(Main, block = block)

      async(CommonPool) { block() } -> GlobalScope.async(block = block)。另外,你的函数无缘无故被标记为suspend

      async(block).await() -> withContext(Default, block = block)

      然而,稳定的协程引入了一个非常重要的附加特性:结构化并发。如图所示,您不应使用GlobalScope,而应定义适当的范围并使用它们。

      【讨论】:

      • 我在 IDE 中遇到错误。我需要在某处使用这个launchAsync、async、asyncAwait。它们是挂起函数。
      • 您要求的字面翻译甚至不涉及函数签名声明。如果你在实验协程的项目中没有报错,切换后不会报错。
      猜你喜欢
      • 2011-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-18
      • 1970-01-01
      • 2015-11-29
      • 1970-01-01
      相关资源
      最近更新 更多