相关疑难解决方法(0)

Kotlin:withContext()vs Async-await

我一直是kotlin文档,如果我理解正确,两个kotlin函数的工作原理如下:

  1. withContext(context):切换当前协同程序的上下文,当给定的块执行时,协同程序切换回上一个上下文.
  2. async(context):在给定的上下文中启动一个新的协同程序,如果我们调用.await()返回的Deferred任务,它将挂起调用协程并在生成的协同程序内执行的块返回时恢复.

现在为以下两个版本code:

版本1:

  launch(){
    block1()
    val returned = async(context){
      block2()
    }.await()
    block3()
  }
Run Code Online (Sandbox Code Playgroud)

版本2:

  launch(){
    block1()
     val returned = withContext(context){
      block2()
    }
    block3()
  }
Run Code Online (Sandbox Code Playgroud)
  1. 在两个版本中,block1(),block3()在默认上下文(commonpool?)中执行,其中block()在给定的上下文中执行.
  2. 整体执行与block1() - > block2() - > block3()顺序同步.
  3. 我看到的唯一区别是version1创建了另一个协程,其中version2在切换上下文时只执行一个协同程序.

我的问题是:

  1. 使用它并不总是更好,withContext而不是async-await功能相似,但不会创建另一个协同程序.大型数字协程,虽然轻量级仍然是要求苛刻的应用程序中的问题

  2. 是否有async-await更优先的案例withContext

更新: Kotlin 1.2.50现在有一个可以转换的代码检查async(ctx) { }.await() to withContext(ctx) { }.

kotlin kotlin-coroutines

67
推荐指数
3
解决办法
1万
查看次数

标签 统计

kotlin ×1

kotlin-coroutines ×1