在界面中声明最后的乐趣
我正在Kotlin编写一个合作的multithreading引擎。 我试图写一个接口,如下所示:
interface Processor { var suspendAction: (Continuation) -> Unit inline suspend fun yield() = suspendCoroutine(suspendAction) suspend fun process(inbox: Inbox) = Unit }
yield()
是我想提供给所有这个接口的实现者的服务。 由于每个虚拟呼叫站点代表了内联的障碍,并且由于每个进入suspend fun
入口都有其代价,出于性能的原因,我需要这个函数是final
,但是Kotlin不允许我这样做。 我发现一个解决方法将yield()
转换为扩展的乐趣:
inline suspend fun Processor.yield() = suspendCoroutine(suspendAction)
我想问一下,这样的用例是否会激励Kotlin语言设计师在interface
final fun
。
请注意,与典型的等待IO暂停方案不同,此处的yield()
发生在CPU密集型热点线程上。