Send 和 Offer 之间的 Kotlin Channels 使用差异
Kotlin Channels usage difference between Send and Offer
Channels 有两个函数可以让我们向其中发送事件。
Send
和 offer
.
我想更好地理解两者之间的区别。
我想检查一些陈述是否属实。
Send
是一个挂起函数。是什么让我的代码(不是线程)等待它完成。所以它在 send
内的事件是 complete/cancelled 之后保持 运行。或者它只会暂停,直到我可以排队 event/receive 吗?
- 这意味着,如果我使用
send
从一个频道到另一个频道,第一个频道将被阻止,直到第二个可以 receive/queue?
- 如果我有一个 Rendezvous 频道并且它已经 运行 一些东西(例如暂停,等待 API)并且我 [=11= 】 一个新偶。这会使
offer
抛出异常?是因为频道收不到?
如果您知道任何其他主要区别,我很乐意知道。
提前致谢
send
在发送到的通道已满时暂停调用它的协程。
send
不发送 从 一个频道 到 另一个频道。当您调用 send
时,您正在将一个元素 发送到 通道。然后通道期望另一个代码块从不同的协同程序调用 receive
。
在RendezvousChannel
中容量是0
。这意味着 send
总是暂停等待来自另一个协程的 receive
调用。如果您在 RendezvousChannel
上调用了 send
,然后使用 offer
,offer
将不会抛出异常(仅当通道关闭时才会抛出异常),而是会抛出异常return false
如果在初始 send
之后没有对 RendezvousChannel
调用平衡 receive
。这是因为 offer
尝试立即将元素添加到通道,如果它不违反其容量限制。
Channels 有两个函数可以让我们向其中发送事件。
Send
和 offer
.
我想更好地理解两者之间的区别。
我想检查一些陈述是否属实。
Send
是一个挂起函数。是什么让我的代码(不是线程)等待它完成。所以它在send
内的事件是 complete/cancelled 之后保持 运行。或者它只会暂停,直到我可以排队 event/receive 吗?- 这意味着,如果我使用
send
从一个频道到另一个频道,第一个频道将被阻止,直到第二个可以 receive/queue? - 如果我有一个 Rendezvous 频道并且它已经 运行 一些东西(例如暂停,等待 API)并且我 [=11= 】 一个新偶。这会使
offer
抛出异常?是因为频道收不到?
如果您知道任何其他主要区别,我很乐意知道。
提前致谢
send
在发送到的通道已满时暂停调用它的协程。
send
不发送 从 一个频道 到 另一个频道。当您调用 send
时,您正在将一个元素 发送到 通道。然后通道期望另一个代码块从不同的协同程序调用 receive
。
在RendezvousChannel
中容量是0
。这意味着 send
总是暂停等待来自另一个协程的 receive
调用。如果您在 RendezvousChannel
上调用了 send
,然后使用 offer
,offer
将不会抛出异常(仅当通道关闭时才会抛出异常),而是会抛出异常return false
如果在初始 send
之后没有对 RendezvousChannel
调用平衡 receive
。这是因为 offer
尝试立即将元素添加到通道,如果它不违反其容量限制。