发送和提供之间的Kotlin通道使用差异

发送和提供之间的Kotlin通道使用差异,kotlin,channel,kotlin-coroutines,kotlin-coroutine-channel,Kotlin,Channel,Kotlin Coroutines,Kotlin Coroutine Channel,通道有两个功能,允许我们向其中发送事件。 发送和提供 我想更好地理解两者之间的区别 我有一些陈述我想核实一下是否属实 Send是一个暂停功能。什么会让我的代码(而不是线程)等待它完成。因此,它会在send内的事件完成/取消后继续运行。或者它将被挂起,直到我可以将事件排队/接收它为止 这意味着,如果我使用send从一个通道发送到另一个通道,第一个通道将被阻塞,直到第二个通道可以接收/排队 如果我有一个集合通道,并且它已经在运行某些东西(例如,在挂起API上等待),我提供一个新的偶数。这将导致报价

通道有两个功能,允许我们向其中发送事件。
发送
提供

我想更好地理解两者之间的区别

我有一些陈述我想核实一下是否属实

  • Send
    是一个暂停功能。什么会让我的代码(而不是线程)等待它完成。因此,它会在
    send
    内的事件完成/取消后继续运行。或者它将被挂起,直到我可以将事件排队/接收它为止
  • 这意味着,如果我使用
    send
    从一个通道发送到另一个通道,第一个通道将被阻塞,直到第二个通道可以接收/排队
  • 如果我有一个集合通道,并且它已经在运行某些东西(例如,在挂起API上等待),我
    提供一个新的偶数。这将导致
    报价
    抛出异常?原因是通道未接收
如果你知道其他的主要区别,我很乐意知道

提前感谢

在发送到的通道已满时,暂停从中调用的协同路由

send
不从一个频道发送到另一个频道。当您调用
send
时,您正在向通道发送一个元素。然后,通道期望另一个代码块从另一个协程调用
接收


会合通道
中,容量为
0
。这意味着
send
总是挂起等待另一个协同程序的
receive
调用。如果您在
会合频道
上调用了
发送
,然后使用
提供
,则不会引发异常(仅当频道关闭时才会引发异常),但是,如果在初始
send
之后,
RendezvousChannel
上没有调用平衡
receive
,它将返回
false
。这是因为
offer
尝试在没有违反容量限制的情况下立即将元素添加到频道中。

这就是让我感到困惑的原因
在频道[因发送而关闭
][isClosedForSend]时抛出异常(有关详细信息,请参阅[close]).
如果没有接收器,并且已经有东西试图进入(发送暂停),那么通道将是
closeForSend
?谢谢很抱歉再问一次,我想带上您可以从中看到的doc单词:“如果调用close关闭此通道,则返回true”。已满的通道未关闭以进行发送。