在 Dispatcher.Main 的上下文中执行网络任务



根据帮助,长网络任务应该在 Dispatcher.IO 的上下文中执行。

但是为什么不能在 Dispatcher.Main 上下文中使用像 get 这样的挂起功能呢?线程本身不会被阻塞,因此我们期望代码出现任何问题,例如:

GlobalScope.launch(Dispatchers.Main) {
val client = HttpClient(Android)
var data: String = client.get('http://example.com')
}

假设get是挂起功能需要很多时间。

谢谢。

你在这里。您可以在Dispatchers.Main中发出该网络请求。

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

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

最新更新