1
我有一个windows服务,它在计时器事件中将项目添加到阻塞集合中,然后为要处理的队列中的每个项目创建一个线程。我使用CompleteAdding()
来确保队列不是空,但我仍然不知道是否为例如 1.如果此方法是线程安全的 2.是否GetConsumingEnumerable()
让消费者线程无限期地等待更多工作? (我希望线程在处理完成时退出 ) 3.此解决方案是否适合生产环境?在阻止收集中对消费者进行线程处理
dt = GetValues()
If Not dt Is Nothing Then
Dim value As Integer
For Each dr As DataRow In dt.Rows
BlockingColl.Add(value)
Next
BlockingColl.CompleteAdding()
Try
'Create consumer threads
While BlockingColl.IsCompleted = False
For Each value As Integer In BlockingColl.GetConsumingEnumerable()
Task.Factory.StartNew(Sub()
If (value IsNot Nothing) Then
ProcessValue(value)
End If
End Sub)
Next
End While
Catch e As InvalidOperationException
throw ex
End Try
End if
所以你说我不需要并发队列或阻塞集合? – user2382789
你需要他们什么? – usr