我想在confirmPayment
函数中触发一个名为initiateFulFillment
的函数,但我不想在confirmPayment
中等待initiateFulFillment
的执行完成,这是因为confirmPayment
的结果不依赖于initiateFulFillment
的调用。
当我使用GlobalScope.launch
触发initiateFulFillment
时,它似乎起作用了,但我想知道这是否是实现我想要的东西的好方法,或者是否有更好的方法?
因为在我的IDE中,我收到一个警告,GloablScope
是一个微妙的API,只有在必须使用它的时候才应该使用它。
fun confirmPayment(orderId: Int): Boolean {
// * some validation *
GlobalScope.launch {
initiateFulFillment(orderId)
}
return true
}
suspend fun initiateFulFillment(orderId: Int) {
// * initiating fulfillment *
}
1条答案
按热度按时间guicsvcw1#
由于
GlobalScope
通常用于执行应用程序生命周期内的工作,因此您确实不应该将其用于短时间或有限的任务,因为这些任务是特定于视图/活动/片段的。使用作用域是很好的,所以你需要创建一个自定义的作用域。有很多方法可以创建和设置自定义的协程作用域,我将展示最简单的一个。
UPD:您应该注意,如果此代码在某种视图模型中运行,并且用户离开屏幕,则可以清除范围,因此它不会等待工作完成。
UPD 2:我在我的例子中使用了IO dispatcher,它适用于网络调用。