基于 ConcurrentQueue 如何实现异步等待消息?
如果要为ConcurrentQueue 提供一个 async Task<Message> GetMessageAsync 等待某个消息的方法应该怎样做?
我大概查找到的资料是可以用 Task ContinueWith 来实现这个事情。但是调用 async GetMessage
的那个线程会不会被阻塞呢?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
自问自答,经过一番搜索研究,有了新的发现。
可以使用 Stephen Cleary 的
AsyncEx
库。项目地址:
https://github.com/StephenCleary/AsyncEx
ConcurrentQueue的实现应该是lock free的, 貌似没有阻塞的API.
如果用这个来实现消息队列, 然后你还想要及时性, 那么就得要用
condition_variable
, 通过condition_variable
来唤醒一个在等待消息的线程, 去GetMessage
;要不然就是另外一个线程去不停的
peek
, 这种就是pull的方式.