根据帮助,长网络任务应该在 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
。