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

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

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

阅读 7.7k
2 个回答

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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进