Dispatcher.IO 和 Dispatcher.Main 哪个更适合用于 API 调用?

问题描述 投票:0回答:2

我在 Android 应用程序中使用 MVVM 架构模式。我想使用

ViewModel
从我的
coroutinescope.lauch{}
进行 API 调用,我是否需要将调度程序指定为
Dispatcher.IO
,因为它将在 IO 线程中执行,或者只使用
ViewModel
提供的调度程序,即
 Dispatcher.Main

android kotlin kotlin-coroutines android-viewmodel android-mvvm
2个回答
3
投票

ViewModel
类上有一个扩展属性,称为
viewModelScope
,默认情况下适用于
Dispatcher.Main
上下文。如果您的 api 函数是
suspend
,您可以使用它来调用,例如:

viewModelScope.launch {
    apiFunction()
    // do other stuff
}

suspend fun apiFunction() { ... }

可以在

suspend
上下文中调用
Dispatchers.Main
函数,它们会挂起协程,但不会阻塞
Main Thread


如果您的 API 函数不是

suspend
,您可以通过使用
suspend
函数将上下文切换到
Dispatchers.IO
,将它们转换为
withContext()
函数。或者,如果 API 函数使用回调,您可以考虑使用
suspendCoroutine
suspendCancellableCoroutine
。使用
withContext
的示例:

viewModelScope.launch {
    apiSuspendFunction()
    // do other stuff
}

suspend fun apiSuspendFunction() = withContext(Dispatchers.IO) { 
    apiNonSuspendFunction()
}

fun apiNonSuspendFunction() { ... }

0
投票

对于api调用Dispatcher.IO更好

了解更多信息

https://proandroiddev.com/kotlin-coroutines-in-android-summary-1ed3048f11c3

https://miro.medium.com/max/720/1*K-5ZG6rVR5Dl9J5E3Rx7eA.png

在你的情况下,你使用 mvvm 所以更好地使用 ViewModelScope

    viewModelScope.launch { 
        // operation
    }
© www.soinside.com 2019 - 2024. All rights reserved.