Kotlin频道之间的发送和报价使用差异

问题描述 投票:1回答:1

通道具有两个功能,可让我们向其中发送事件。Sendoffer

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

我有一些要核对的陈述是正确的。

  • Send是挂起函数。是什么让我的代码(不是线程)等待完成。因此,它在send内部的事件完成/取消后继续运行。还是只有在我可以排队事件/接收事件之前,它才被挂起?
  • 这意味着,如果我从一个通道到另一个通道使用send,则第一个通道将被阻塞,直到第二个通道可以接收/排队?
  • 如果我有一个Rendezvous频道,并且它已经在运行某些内容(例如,处于暂停状态,正在等待API),并且我offer一个新的偶数。这会使offer引发异常吗?导致频道未收到?

如果您知道其他主要区别,我将很高兴知道。

提前感谢

kotlin channel kotlin-coroutines kotlin-coroutine-channel
1个回答
3
投票

[send暂停在发送到的通道已满时调用它的协程。

send不发送来自一个通道另一个通道。调用send时,正在发送元素to通道。然后,通道期望另一个代码块从其他协程调用send

receive中,容量为RendezvousChannel。这意味着0总是挂起,等待来自其他协程的send调用。如果在receive上调用了send,然后使用RendezvousChannel,则offer不会引发异常(仅在关闭通道的情况下会引发异常),但是如果没有平衡,则它将返回offer。初始offer之后,已在false上调用了C0。这是因为receive会尝试在不违反其容量限制的情况下立即将元素添加到通道中。

© www.soinside.com 2019 - 2024. All rights reserved.