3

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

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

我有一些陈述我想检查是真的。

  • Send是一个挂起函数。什么会让我的代码(不是线程)等待它完成。所以它在里面的事件send完成/取消后继续运行。或者它只会暂停,直到我可以将事件排队/接收它?
  • 这意味着,如果我send从一个通道到另一个通道,第一个通道将被阻塞,直到第二个通道可以接收/排队?
  • 如果我有一个Rendezvous Channel 并且它已经在运行某些东西(例如,在挂起时,等待 API)并且我offer是一个新的偶数。这会offer引发异常吗?导致频道收不到?

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

提前致谢

4

1 回答 1

5

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

send不会一个通道发送另一个通道。当您调用时,您正在通道send发送一个元素。然后通道期望另一个代码块从不同的协程调用。receive

在一个RendezvousChannel容量是0。这意味着send总是暂停等待receive来自另一个协程的调用。如果您send在 a上调RendezvousChannel​​用然后使用offeroffer则不会抛出异常(仅在通道关闭时才会抛出),而是如果在您的初始 之后没有调用false平衡,它将返回。这是因为如果元素不违反其容量限制,它会尝试立即将元素添加到通道中。receiveRendezvousChannelsendoffer

于 2020-05-28T19:34:21.350 回答