Kotlin coroutines 为什么querySkuDetails需要在IO上下文中运行?

Kotlin coroutines 为什么querySkuDetails需要在IO上下文中运行?,kotlin-coroutines,play-billing-library,Kotlin Coroutines,Play Billing Library,根据billingClient.queryskuedetails是通过withContext(Dispatchers.IO) 没有更多的上下文,我不知道如何下载计费客户端的源代码。调用的底层方法是queryskuedetailsasync,它接受回调并异步执行网络请求 正确的是,这里不需要withContext(Dispatchers.IO),它实际上引入了不必要的开销 从 这似乎是一个常见的误解,即仅仅因为IO是由挂起函数执行的,所以必须在Dispatchers.IO中调用它,这是不必要的(而

根据
billingClient.queryskuedetails
是通过
withContext(Dispatchers.IO)


没有更多的上下文,我不知道如何下载计费客户端的源代码。

调用的底层方法是
queryskuedetailsasync
,它接受回调并异步执行网络请求

正确的是,这里不需要
withContext(Dispatchers.IO)
,它实际上引入了不必要的开销

这似乎是一个常见的误解,即仅仅因为IO是由挂起函数执行的,所以必须在Dispatchers.IO中调用它,这是不必要的(而且可能会很昂贵)

按照约定挂起函数不会阻塞调用线程,如果需要,会在Dispatchers.IO中内部阻塞

fun querySkuDetails() {
    val skuList = ArrayList<String>()
    skuList.add("premium_upgrade")
    skuList.add("gas")
    val params = SkuDetailsParams.newBuilder()
    params.setSkusList(skuList).setType(SkuType.INAPP)
    val skuDetailsResult = withContext(Dispatchers.IO) {
        billingClient.querySkuDetails(params.build())
    }
    // Process the result.
}
val skuDetailsResult = coroutineScope {
        billingClient.querySkuDetails(params.build())
}