【发布时间】:2014-03-15 10:13:01
【问题描述】:
在过去的几个小时里,我一直在努力让 BlockingCollection 的基本实现工作。我似乎一辈子都找不到 VB.NET 教程,所以一直在尝试从 C# 教程中获得一些有用的东西。
我只是想让一个基本的实现工作,这样我就可以继续做我真正需要的事情。但我被困住了。
这是我目前的代码:
Dim blockingCollection As BlockingCollection(Of String) = New BlockingCollection(Of String)
Dim count As Integer = 0
Task.Factory.StartNew(Sub()
While (True)
blockingCollection.Add("value" + count)
count = count + 1
End While
End Sub)
Task.Factory.StartNew(Sub()
For Each value As String In blockingCollection.GetConsumingEnumerable()
Debug.Print("Worker 1: " + value)
Next
End Sub)
运行此程序没有得到任何输出,只有以下例外:
“System.FormatException”类型的第一次机会异常发生在 mscorlib.dll 'System.FormatException' 类型的第一次机会异常 发生在 Microsoft.VisualBasic.dll 类型的第一次机会异常 Microsoft.VisualBasic.dll 中发生“System.InvalidCastException”
在过去的几个小时里,我一直在谷歌上搜索,试图解决这个问题,但无济于事。希望这里有人可以提供帮助。
谢谢
【问题讨论】:
-
将 Option Strict On 放在源代码文件的顶部,编译器会告诉您问题所在。避免添加字符串和数字,使用 count.ToString()。还向您展示了检查任务是否成功完成很重要。使用 ContinueWith() 和 TaskContinuationOptions.OnlyOnFaulted 来报告异常。
标签: vb.net producer-consumer blockingcollection