Go Select 语句中的优先级
使用 Go 的 select 语句处理多个通道时,不保证处理通道的顺序。要优先考虑一个通道而不是另一个通道,可以使用一种解决方法。
问题陈述
在下面的代码片段中,目标是确保输出通道中的所有值在退出通道之前进行处理:
但是,使用 select 语句不会为一个通道提供高于其他通道的优先级其他。
解决方案:原生语言支持
Go 本身支持通过将“退出”通道的可见性限制为仅生产者来在 select 语句中对通道进行优先级排序。当生产者决定退出时,它会关闭频道。只有当通道为空并关闭时,消费者才会退出。
在这个例子中,退出通道仅对生产者函数(productEndless)可见。生产者在一定延迟后随机决定退出。消费者函数(main)迭代 vals 通道,直到它关闭并为空。通过优先考虑生产者的“退出”消息,在程序退出之前处理 vals 通道中的所有值。
以上是如何在 Go 的 select 语句中确定通道的优先级?的详细内容。更多信息请关注PHP中文网其他相关文章!