Kotlin 回调函数是多线程的吗?
Are Kotlin callback functions multi-threaded?
在下面的例子中(来自 Kotlin 文档),有嵌套的回调函数。
假设在主线程上调用了 postItem
,调用 preparePostAsync
后主线程是否立即继续执行而不等待 preparePostAsync
完成?
如果是,这是否意味着Kotlin实际上是在回调函数的掩护下执行多线程? (假设这是真的,是否意味着回调数=线程数?)
fun postItem(item: Item) {
preparePostAsync { token ->
submitPostAsync(token, item) { post ->
processPost(post)
}
}
}
如果和多线程无关,那么回调函数和多线程有什么区别?
这完全取决于您正在使用的API。文档中的那些例子是虚构的,不是标准库的一部分。
通常,当函数接受回调时,它会在请求入队后立即returns,并在结果返回时在主线程上调用回调。
像 OkHttp 这样的网络库在后台使用线程池,因此 运行 后台线程与发出的请求数不一定是一一对应的。
“回调”一词只是遵循这种模式的异步任务的非正式名称。
在下面的例子中(来自 Kotlin 文档),有嵌套的回调函数。
假设在主线程上调用了 postItem
,调用 preparePostAsync
后主线程是否立即继续执行而不等待 preparePostAsync
完成?
如果是,这是否意味着Kotlin实际上是在回调函数的掩护下执行多线程? (假设这是真的,是否意味着回调数=线程数?)
fun postItem(item: Item) {
preparePostAsync { token ->
submitPostAsync(token, item) { post ->
processPost(post)
}
}
}
如果和多线程无关,那么回调函数和多线程有什么区别?
这完全取决于您正在使用的API。文档中的那些例子是虚构的,不是标准库的一部分。
通常,当函数接受回调时,它会在请求入队后立即returns,并在结果返回时在主线程上调用回调。
像 OkHttp 这样的网络库在后台使用线程池,因此 运行 后台线程与发出的请求数不一定是一一对应的。
“回调”一词只是遵循这种模式的异步任务的非正式名称。