VB.Net:从线程上的 ConcurrentQueue 中检索项目
VB.Net: Retrieving items from a ConcurrentQueue on a thread
我在一个线程上有一个 class 运行,它侦听数据并将其推送到字符串的 ConcurrentQueue 中。我正在使用 Enqueue 向其中添加数据,我可以看到队列长度在增加,所以我知道数据正在正确排队。
另一个线程上的另一个class 运行然后应该以先进先出的方式取出每条数据。但是,它什么也不做。这是应该从队列中提取数据的循环:
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 确实有效,但是当什么都没有发生时会占用线程,因此可能不推荐这样做。有没有更优雅的方法来做到这一点?
如您所见,您需要不断循环,因为允许队列为空并且您不希望循环退出。只睡一小段时间,让它重新充满。一个用于控制操作何时完成的简单布尔标志就是终止所需的全部内容。
Dim data As String = Nothing
While mCancel = False
If queueMessages.TryDequeue(data) Then
Console.WriteLine(data)
Else
Console.WriteLine("Empty")
Thread.sleep(50)
End If
End While
我在一个线程上有一个 class 运行,它侦听数据并将其推送到字符串的 ConcurrentQueue 中。我正在使用 Enqueue 向其中添加数据,我可以看到队列长度在增加,所以我知道数据正在正确排队。
另一个线程上的另一个class 运行然后应该以先进先出的方式取出每条数据。但是,它什么也不做。这是应该从队列中提取数据的循环:
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 确实有效,但是当什么都没有发生时会占用线程,因此可能不推荐这样做。有没有更优雅的方法来做到这一点?
如您所见,您需要不断循环,因为允许队列为空并且您不希望循环退出。只睡一小段时间,让它重新充满。一个用于控制操作何时完成的简单布尔标志就是终止所需的全部内容。
Dim data As String = Nothing
While mCancel = False
If queueMessages.TryDequeue(data) Then
Console.WriteLine(data)
Else
Console.WriteLine("Empty")
Thread.sleep(50)
End If
End While