【发布时间】:2016-09-09 21:20:22
【问题描述】:
我有一个类在一个线程上运行,它侦听数据并将其推送到字符串的 ConcurrentQueue 中。我正在使用 Enqueue 向其中添加数据,我可以看到队列长度正在增长,因此我知道数据正在正确排队。
在另一个线程上运行的另一个类应该在 FIFO 的基础上取出每条数据。然而,它根本什么都不做。这是应该将数据拉出队列的循环:
Dim data As String = Nothing
While Globals.queueMessages.Count > 0
queueMessages.TryDequeue(data)
If (data IsNot Nothing) Then
Console.WriteLine(data)
Else
Console.WriteLine("Failed to dequeue")
End If
End While
除了使用 Count() 检查队列中的项目数外,我还尝试过 IsEmpty。结果一样!?
虽然似乎有很多关于在 C# 中使用 ConcurrentQueue 的文章,但我没有找到任何 VB.Net 示例,所以我有点卡住了。
帮助!
更新:在 Do ... 循环中包装我的 While ... End While 确实有效,但是当什么都没有发生时会占用线程,因此可能不推荐。有没有更优雅的方法来做到这一点?
【问题讨论】:
标签: vb.net multithreading concurrent-queue