如何使协程从外部调用按顺序运行

佩德罗

我是协程及其工作方式的真正新手,虽然我读了很多,但是似乎无法理解如何或是否可以实现自己的最终目标。

我将尽我所能详细解释。无论如何,这是我的目标:

Ensure that coroutines run sequentially when a method that has said coroutine is called.

我创建了一个与我想要发生的情况相匹配的测试:

class TestCoroutines {

  @Test
  fun test() {
    println("Starting...")

    runSequentially("A")
    runSequentially("B")

    Thread.sleep(1000)
  }

  fun runSequentially(testCase: String) {
    GlobalScope.launch {
      println("Running test $testCase")
      println("Test $testCase ended")
    }
  }
}

重要说明:我无法控制某人将调用runSequentially函数多少次但我想保证将按顺序调用它。

此测试运行以下输出:

Starting...
Running test B
Running test A
Test A ended
Test B ended

Starting...
Running test A
Running test B
Test B ended
Test A ended

This is the output I want to achieve :
Starting...     
Running test A
Test A ended
Running test B
Test B ended

我想我知道为什么会这样:每次我打电话时,runSequentially我都会创建一个新的Job,该Job正在运行,并且异步运行。

当我们无法控制所说的协程被调用了多少次时,协程是否有可能保证它们仅在先前(如果正在运行)完成之后才运行?

马克·托波尼克(Marko Topolnik)

您要查找的是将请求排序的队列和为请求服务的工作程序的组合。简而言之,您需要一个演员

private val testCaseChannel = GlobalScope.actor<String>(
        capacity = Channel.UNLIMITED
) {
    for (testCase in channel) {
        println("Running test $testCase")
        println("Test $testCase ended")
    }
}

fun runSequentially(testCase: String) = testCaseChannel.sendBlocking(testCase)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何取消withContext中运行的协程?

来自分类Dev

在Python中从协程调用协程

来自分类Dev

在Python中从协程调用协程

来自分类Dev

按顺序运行外部脚本

来自分类Dev

如何从已销毁的外部游戏对象执行协程

来自分类Dev

如何按顺序运行多个`mapdeck_view`调用?

来自分类Dev

如何使用Kotlin协程调用阻塞函数?

来自分类Dev

如何添加协程到正在运行的异步循环?

来自分类Dev

如何并行运行多个阻塞IO协程

来自分类Dev

如何并行运行多个阻塞IO协程

来自分类Dev

如何同时运行n个python协程?

来自分类Dev

Cocotb协程从未调用

来自分类Dev

Kotlin协程运行阻止无法按预期方式运行,并且无法阻止for循环的执行

来自分类Dev

调用并行协程并等待所有协程结束

来自分类Dev

如何使useEffect按顺序运行?

来自分类Dev

如何模拟异步协程?

来自分类Dev

尽管调用了启动方法,但Kotlin协程还是同步运行

来自分类Dev

Kotlin:如何在不运行runBlocking的情况下等待协程停止运行?

来自分类Dev

Retroift协程仅首次调用livedata

来自分类Dev

禁用GameObject,但继续运行协程

来自分类Dev

我们如何在需要协程的情况下调用正常函数?

来自分类Dev

如何调用科特林从Java 7挂起协程功能

来自分类Dev

如何使用协程作用域调用Web服务并处理错误Kotlin

来自分类Dev

如何在kotlin中使用协程每秒调用一个函数

来自分类Dev

如何在Controller方法内创建协程以调用暂停函数

来自分类Dev

如何在不使用Unity的协程的情况下在主线程上运行函数

来自分类Dev

如何并行运行多个Kotlin协程并等待它们完成后再继续

来自分类Dev

如何按顺序运行MiniTest :: Unit测试?

来自分类Dev

Angularjs如何按顺序运行函数?

Related 相关文章

  1. 1

    如何取消withContext中运行的协程?

  2. 2

    在Python中从协程调用协程

  3. 3

    在Python中从协程调用协程

  4. 4

    按顺序运行外部脚本

  5. 5

    如何从已销毁的外部游戏对象执行协程

  6. 6

    如何按顺序运行多个`mapdeck_view`调用?

  7. 7

    如何使用Kotlin协程调用阻塞函数?

  8. 8

    如何添加协程到正在运行的异步循环?

  9. 9

    如何并行运行多个阻塞IO协程

  10. 10

    如何并行运行多个阻塞IO协程

  11. 11

    如何同时运行n个python协程?

  12. 12

    Cocotb协程从未调用

  13. 13

    Kotlin协程运行阻止无法按预期方式运行,并且无法阻止for循环的执行

  14. 14

    调用并行协程并等待所有协程结束

  15. 15

    如何使useEffect按顺序运行?

  16. 16

    如何模拟异步协程?

  17. 17

    尽管调用了启动方法,但Kotlin协程还是同步运行

  18. 18

    Kotlin:如何在不运行runBlocking的情况下等待协程停止运行?

  19. 19

    Retroift协程仅首次调用livedata

  20. 20

    禁用GameObject,但继续运行协程

  21. 21

    我们如何在需要协程的情况下调用正常函数?

  22. 22

    如何调用科特林从Java 7挂起协程功能

  23. 23

    如何使用协程作用域调用Web服务并处理错误Kotlin

  24. 24

    如何在kotlin中使用协程每秒调用一个函数

  25. 25

    如何在Controller方法内创建协程以调用暂停函数

  26. 26

    如何在不使用Unity的协程的情况下在主线程上运行函数

  27. 27

    如何并行运行多个Kotlin协程并等待它们完成后再继续

  28. 28

    如何按顺序运行MiniTest :: Unit测试?

  29. 29

    Angularjs如何按顺序运行函数?

热门标签

归档