我只是在阅读和学习Kotlin中的协程,以便在一个小型图书馆中用于娱乐/学习。在文档中,您可以执行以下操作

GlobalScope.launch {

}

所以我的方法
fun myMethod() {
    GlobalScope.launch {
        // do some networking code
    }
}

使用GlobalScope为库启动协程是否是最佳实践?在文档中说



显然,这是一个库,不一定是应用程序代码。但是我不确定这是否是与协程在后台进行联网的最佳方法。

我也试过
runBlocking {
    async {
        // do some networking code
    }
}

以为runBlocking引入了新的协程范围,但是在这种情况下,我认为它从其父级(即主线程)继承了该范围,因此我得到了关于主UI线程上无网络的异常(exception)。

最佳答案

您可以创建一个挂起函数,这将强制用户自己从协程调用此函数。
如果您的方法使用withContext,则不必担心GlobalScope或配置范围。 withContext只是告诉协程要使用哪个上下文(对于联网,您需要IO。作用域现在由用户启动它来确定。

我构造方法的方式是:

suspend fun myMethod() = withContext(Dispatchers.IO) {
    // do some networking code
}

09-25 16:57