在Kotlin的viewModelScope.launch块中使用launchIn(viewModelScope)安全吗?

oxf4rvwz  于 2023-10-23  发布在  Kotlin
关注(0)|答案(1)|浏览(202)

我在Android应用程序中有一段Kotlin代码,我在其中使用了协程和ViewModelScope。我想确认在viewModelScope.launch块中使用launchIn(viewModelScope)是否会导致任何问题或被视为标准做法。下面是代码片段以供参考:

fun test() {
      testJob?.cancel()

      testJob = viewModelScope.launch {
          delay(1000L)
          flow<String> {
              //
          }.onEach { 
              //
          }.launchIn(viewModelScope)
      }
  }
h7appiyu

h7appiyu1#

这是安全的,但一个不寻常的事情要做。通过直接在作用域中启动它,集合成为一个新的兄弟协程,而不是子协程或只是当前协程本身的一部分。
这通常是更明智的:

fun test() {
    testJob?.cancel()

    testJob = viewModelScope.launch {
        delay(1000L)
        flow<String> {
            //
        }.collect { 
            //
        }
    }
}

但我能想到的一个可能的原因是,如果你想在开始收集后做其他事情,而不是等待它。

相关问题