【问题标题】:Basic BlockingCollection Producer Consumer in VB.NETVB.NET 中的基本 BlockingCollection 生产者消费者
【发布时间】: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


【解决方案1】:

这段代码会执行,虽然我不知道你想要什么。

    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.ToString)
                                  count = count + 1
                              End While
                          End Sub)

    Task.Factory.StartNew(Sub()
                              For Each value As String In blockingCollection.GetConsumingEnumerable()
                                  Debug.WriteLine("Worker 1: " & value)
                              Next
                          End Sub)

【讨论】:

  • 我想要的只是一个基本的工作示例,以便在继续之前理解它。我尝试过的所有教程都遇到同样的问题
  • 谢谢。对不起,我一直工作到凌晨,一直在语言之间来回穿梭。在我从 C# 教程到 vb.net 代码的转换中忘记了 VB 与其他所有编程语言的尴尬不同。 + 而不是 & 的问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多