`SendChannel.offer`、`CompletableDeferred.complete` 等是否可以在协程外调用?
Can `SendChannel.offer`, `CompletableDeferred.complete`, and similar be called outside coroutines?
CompletableDeferred
文件说
All functions on this interface and on all interfaces derived from it are thread-safe and can be safely invoked from concurrent coroutines without external synchronization.
在协程之外调用这些函数是否安全?
因为SendChannel<E>
,offer
和close
不是suspend
所以它们在语法上可以在协程外调用,但是这样做真的安全吗?
如果 需要协程,启动一个协程的成本最低的方法是什么:launch(Unconfined)
?
从任何地方调用 offer
和 close
都是安全的。这就是文档用 "are thread-safe" 短语表达的意思。
将这些方法包含在通道 API 中的原因之一是支持将协程与基于各种回调和事件处理程序的常规非协程世界集成。您可以在此 guide on UI programming with coroutines 中看到此类集成的实际示例。
CompletableDeferred
文件说
All functions on this interface and on all interfaces derived from it are thread-safe and can be safely invoked from concurrent coroutines without external synchronization.
在协程之外调用这些函数是否安全?
因为SendChannel<E>
,offer
和close
不是suspend
所以它们在语法上可以在协程外调用,但是这样做真的安全吗?
如果 需要协程,启动一个协程的成本最低的方法是什么:launch(Unconfined)
?
从任何地方调用 offer
和 close
都是安全的。这就是文档用 "are thread-safe" 短语表达的意思。
将这些方法包含在通道 API 中的原因之一是支持将协程与基于各种回调和事件处理程序的常规非协程世界集成。您可以在此 guide on UI programming with coroutines 中看到此类集成的实际示例。