Kotlin “SendChannel.offer”、“CompletableDeferred.complete”和类似的功能能否在协同程序外调用?
Kotlin “SendChannel.offer”、“CompletableDeferred.complete”和类似的功能能否在协同程序外调用?,kotlin,coroutine,kotlinx.coroutines,Kotlin,Coroutine,Kotlinx.coroutines,CompletableDeferred文档中说 此接口上以及由此派生的所有接口上的所有函数都是线程安全的,可以从并发协同路由安全地调用,而无需外部同步 在任何协程之外调用这些函数安全吗 对于SendChannel,offer和close不是suspend,因此它们可以在协同程序之外进行语法调用,但这样做确实安全吗 如果需要协同程序,启动协同程序最便宜的方法是什么:启动(非限制)?从任何地方调用提供和关闭都是安全的。这就是文档中“是线程安全的”这句话的意思 将这些方法包括在通道API中的原因之一是
CompletableDeferred
文档中说
此接口上以及由此派生的所有接口上的所有函数都是线程安全的,可以从并发协同路由安全地调用,而无需外部同步
在任何协程之外调用这些函数安全吗
对于SendChannel
,offer
和close
不是suspend
,因此它们可以在协同程序之外进行语法调用,但这样做确实安全吗
如果需要协同程序,启动协同程序最便宜的方法是什么:
启动(非限制)
?从任何地方调用提供
和关闭
都是安全的。这就是文档中“是线程安全的”这句话的意思
将这些方法包括在通道API中的原因之一是,支持将协同路由与基于各种回调和事件处理程序的常规非协同路由世界进行集成。您可以在本文中看到这种集成的实际示例