发送和提供之间的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”。已满的通道未关闭以进行发送。