基于 ConcurrentQueue 如何实现异步等待消息?

发布于 2022-09-01 22:26:24 字数 187 浏览 27 评论 0

如果要为ConcurrentQueue 提供一个 async Task<Message> GetMessageAsync 等待某个消息的方法应该怎样做?

我大概查找到的资料是可以用 Task ContinueWith 来实现这个事情。但是调用 async GetMessage 的那个线程会不会被阻塞呢?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

白日梦 2022-09-08 22:26:24

自问自答,经过一番搜索研究,有了新的发现。

可以使用 Stephen Cleary 的 AsyncEx 库。
项目地址:
https://github.com/StephenCleary/AsyncEx

梦年海沫深 2022-09-08 22:26:24

ConcurrentQueue的实现应该是lock free的, 貌似没有阻塞的API.
如果用这个来实现消息队列, 然后你还想要及时性, 那么就得要用condition_variable, 通过condition_variable来唤醒一个在等待消息的线程, 去GetMessage;
要不然就是另外一个线程去不停的peek, 这种就是pull的方式.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文