【问题标题】:Kotlin Coroutines How to get CoroutineScope for the current Thread?Kotlin Coroutines 如何获取当前线程的 CoroutineScope?
【发布时间】:2019-06-19 01:50:10
【问题描述】:

在 Kotlin Coroutines 中,想为当前线程创建一个引用并在以后使用。

fun myFuncion(){
    //save current Thread CoroutineScope
    var currentCoroutineScope : CoroutineScope // <How to create?>
    GlobalScope.launch { 
        //Do something 001
        currentCoroutineScope .launch {
            //Do something 002

        }
    }
}

有人可以帮忙吗?

【问题讨论】:

  • 嗨,我也有同样的问题。我想在另一个范围内调用挂起函数,然后在原始范围内调用其他方法。你的问题解决了吗?
  • 我使用的唯一解决方案是:- 将作用域作为函数的参数传递。

标签: kotlin kotlin-coroutines


【解决方案1】:

您可以使用保存对 Coroutines 范围的引用

val scope = CoroutineScope(Dispatchers.Default)

然后你就可以像这样使用它了

fun myFuncion() {
    scope.launch {
        // do something
    }
}

来自 cmets 的更新:

如果你从主线程调用myFunction(),那么你可以这样做

fun myFuncion() {
        scope.launch {
            // do something
            withContext(Dispatchers.Main) { 
                //Do something 002
            }

        }
    }

【讨论】:

  • 对不起,这不起作用。即使我从 "main" "// do something" 调用 myFucntion 正在 "DefaultDispatcher-worker-2" 上运行(例如)
  • @SudarNimalan 它将在您将在 CoroutineScope(Dispatchers.Default) 中设置的任何调度程序上运行。您可以将默认值更改为io
  • 我想确保 "//Do something 002" 在 myFunction 的相同范围内运行
  • 谢谢 - 如果我想使用来自其他 Scope 的 myFunction 调用,我不想硬编码“Dispatchers.Main”。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-18
  • 2020-04-09
  • 2023-03-05
  • 2016-04-08
  • 2013-06-24
相关资源
最近更新 更多