2014-03-15 4 views
0

Я занимаюсь в течение последних нескольких часов, чтобы получить базовую реализацию BlockingCollection для работы. Кажется, я не могу найти учебник в VB.NET для жизни, поэтому я пытался получить что-то из учебников на C#.Basic BlockingCollection Producer Consumer в VB.NET

Я просто хочу получить базовую реализацию, чтобы я мог продвигаться к тому, что мне действительно нужно. Но я застрял.

Это мой код в настоящее время:

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. Первое случайное исключение типа «System.InvalidCastExcepti on 'произошел в Microsoft.VisualBasic.dll

Я искал поисковые запросы в течение последних нескольких часов, чтобы попытаться разрешить это, но безрезультатно. Надеюсь, кто-то здесь может помочь.

Благодаря

+1

Положите опцию Strict On в начале файла исходного кода, и компилятор расскажет вам о проблеме. Избегайте добавления строки и числа, используйте count.ToString(). Также показывает, что важно * проверить *, если задача выполнена успешно. Используйте ContinueWith() с TaskContinuationOptions.OnlyOnFaulted, чтобы сообщать об исключениях. –

ответ

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) 
+0

Все, что я хочу, - это основной рабочий пример, чтобы понять его, прежде чем двигаться дальше. Я получаю те же проблемы со всеми учебниками, которые я пробовал –

+0

Спасибо. Извините, что я работал в ранние часы и перебирался между языками. Забудьте в моем преобразовании из учебника C# в код vb.net, что VB неудобно отличается от любого другого языка программирования. Проблемы с + –

Смежные вопросы