首页 > 解决方案 > Kotlin 回调函数是多线程的吗?

问题描述

在下面的示例中(来自 Kotlin 文档),有嵌套的回调函数。

假设postItem在主线程上调用,是否在调用preparePostAsync主线程后立即继续执行而不等待preparePostAsync完成?

如果是,这是否意味着 Kotlin 实际上是在回调函数的掩护下执行多线程?(假设这是真的,那是否意味着回调数 = 线程数?)

fun postItem(item: Item) {
    preparePostAsync { token -> 
        submitPostAsync(token, item) { post -> 
            processPost(post)
        }
    }
}

如果和多线程无关,那么回调函数和多线程有什么区别呢?

标签: multithreadingkotlincallback

解决方案


这完全取决于您正在使用的 API。文档中的那些示例是虚构的,不是标准库的一部分。

通常,当一个函数接受回调时,它会在请求入队后立即返回,并在返回结果时调用主线程上的回调。

像 OkHttp 这样的网络库在后台使用线程池,因此运行的后台线程不一定与发出的请求数一一对应。

“回调”这个词只是遵循这种模式的异步任务的非正式名称。


推荐阅读