可以`SendChannel.offer`,`CompletableDeferred.complete`,以及类似的外部协程吗?

时间:2017-12-05 12:56:47

标签: kotlin coroutine kotlinx.coroutines

CompletableDeferred文档说

  

此接口及其派生的所有接口上的所有函数都是线程安全的,可以从并发协程安全地调用,而无需外部同步。

在任何协程之外调用这些函数是否安全?

对于SendChannel<E>offerclose不是suspend,因此可以在语法协调之外调用它们,但它实际上是否安全?

如果需要协程,那么最便宜的方法是什么:launch(Unconfined)

1 个答案:

答案 0 :(得分:1)

从任何地方拨打offerclose都是安全的。这就是文档用“线程安全”短语来表示的意思。

这些方法包含在通道API中的原因之一是能够将协同程序与基于各种回调和事件处理程序的常规非协程世界集成。您可以在此guide on UI programming with coroutines中查看此类集成的实际示例。