multithreading - Kotlin 回调函数是多线程的吗?
问题描述
在下面的示例中(来自 Kotlin 文档),有嵌套的回调函数。
假设postItem
在主线程上调用,是否在调用preparePostAsync
主线程后立即继续执行而不等待preparePostAsync
完成?
如果是,这是否意味着 Kotlin 实际上是在回调函数的掩护下执行多线程?(假设这是真的,那是否意味着回调数 = 线程数?)
fun postItem(item: Item) {
preparePostAsync { token ->
submitPostAsync(token, item) { post ->
processPost(post)
}
}
}
如果和多线程无关,那么回调函数和多线程有什么区别呢?
解决方案
这完全取决于您正在使用的 API。文档中的那些示例是虚构的,不是标准库的一部分。
通常,当一个函数接受回调时,它会在请求入队后立即返回,并在返回结果时调用主线程上的回调。
像 OkHttp 这样的网络库在后台使用线程池,因此运行的后台线程不一定与发出的请求数一一对应。
“回调”这个词只是遵循这种模式的异步任务的非正式名称。
推荐阅读
- javascript - 按名称将频道添加到类别
- redis - 在redis中复制一个键
- python - Numpy - 一维和二维数组的不同行为
- java - SocketException:无效参数:当 jre 在映射驱动器上定位时创建
- docker - Docker:忽略构建上下文中需要的一些文件
- javascript - 我如何知道谁使用 PHP 卸载了推送通知?
- adobe-analytics - 在工作区中为任何页面是特定页面的上一页的比率创建一个指标?
- c# - 如何让用户在运行 C# 应用程序之前安装 .net framework 4.5.2
- r - gganimate中的自定义列到框架标题
- rasa-core - 下载rasa_core时出现张量流问题