s1m*_*nw1 6 coroutine kotlin kotlinx.coroutines
我有一个Job
实例列表,我希望在发布后的某个时刻取消.这看起来如下:
val jobs = arrayListOf<Job>()
//launch and add jobs...
jobs.forEach { it.cancelAndJoin() } // cancels the jobs and waits for completion
Run Code Online (Sandbox Code Playgroud)
不幸的是,这里不可能使用方法参考.原因:cancelAndJoin
是一个suspend
函数,因为编译器抱怨:
jobs.forEach (Job::cancelAndJoin)
Run Code Online (Sandbox Code Playgroud)
"错误:(30,24)Kotlin:不支持[可暂停函数的可调用引用]"
为什么这不起作用?
基本上,支持这一点需要额外的语言设计部分,而不是简单地与协同程序捆绑在一起.
为什么这不重要?因为当你采用普通函数的可调用引用时,例如String::reversed
,你得到类似的东西KFunction1<String, String>
.如果你可以用一个suspend
函数做同样的事情,你期望得到什么?
如果它是相同的KFunctionN<...>
,那么有一个明显的问题,你可以将它传递给一个普通的函数,并调用它,违反了suspend
只能在协同程序内部调用函数的规则(编译器转换其调用站点的地方).
所以,它应该是更具体的东西.(我目前只是猜测,不知道实际的设计尝试)例如,它可能是a SuspendKFunctionN<...>
,它invoke(...)
是一个暂停函数,或者它可能(不太可能)只是一个特殊的符号,仅用于传递函数引用a suspend (T) -> R
是预期的,但无论如何,这样的功能需要彻底的设计才能面向未来.
归档时间: |
|
查看次数: |
1166 次 |
最近记录: |