Lou*_*man 5 kotlin kotlin-coroutines
通常,suspend fun
不能使用fun
s 代替普通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
是特殊的科特林莫名其妙套管该地图是一个内联的乐趣,暂停是自动推断“上游”
是的。内联后检查暂停乐趣。我在文档中没有看到明确提到这一点,但在Coroutines KEEP 中有一个:
注意:挂起 lambda 可以在其代码的所有位置调用挂起函数,其中允许来自此 lambda 的非本地 return 语句。也就是说,允许在诸如 apply{} 块之类的内联 lambda 内暂停函数调用,但不允许在 noinline 或 crossinline 内部 lambda 表达式中。暂停被视为一种特殊的非本地控制转移。
归档时间: |
|
查看次数: |
54 次 |
最近记录: |