我有一个在一个线程上运行的类,它侦听数据并将其推送到字符串的 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 示例,所以我有点卡住了。
帮助 !
更新:包装我的 While ... End While in a Do ... Loop 确实有效,但是当什么都没有发生时会占用线程,因此可能不建议这样做。有没有更优雅的方法来做到这一点?