是什么让Iterable.map与暂停功能一起工作?

Lou*_*man 5 kotlin kotlin-coroutines

通常,suspend fun不能使用funs 代替普通s。如果尝试suspend fun直接从normal 调用a fun,则会得到编译时错误。

这篇博客文章提到您可以通过编写Kotlin中的并发地图

list.map { async { f(it) } }.map { it.await() }
Run Code Online (Sandbox Code Playgroud)

为什么第二个map编译?通常,您不能通过suspend fun代替fun。是吗

  • map是,inline fun并且暂停被自动推断为“上游”
  • map是特殊的科特林莫名其妙套管
  • 还有什么吗

Ale*_*nov 5

该地图是一个内联的乐趣,暂停是自动推断“上游”

是的。内联检查暂停乐趣。我在文档中没有看到明确提到这一点,但在Coroutines KEEP 中有一个:

注意:挂起 lambda 可以在其代码的所有位置调用挂起函数,其中允许来自此 lambda 的非本地 return 语句。也就是说,允许在诸如 apply{} 块之类的内联 lambda 内暂停函数调用,但不允许在 noinline 或 crossinline 内部 lambda 表达式中。暂停被视为一种特殊的非本地控制转移。