1

メインスレッドがファイルを読み取り、それを部分に分割するプロセスがあります。これらのパーツには、さらに処理が必要です。ダウンストリーム処理ができるだけ多くの CPU (または多くのコア) を利用できるように、利用可能なスレッドを利用したいと考えています。メイン スレッドから過剰なバックログを作成したくないので、使用可能な別のスレッドができるまで、メイン スレッドがキューに追加されるのを待機する必要があります。

VB.NET 4.0: Looking to execute multiple threads, but wait until all threads are completed before resuming , but they are waiting for all threads to complete , while I just need any threads to be availableのような多くの記事を目にします

これはTask Parallel Libraryで取り組むことができるものですか、それとも手動でスレッドを作成してスレッドプールを監視する必要がありますか?

Using Reader As New StreamReader(FileName)
    Do
        CurrentBlockSize = Reader.ReadBlock(CurrentBuffer, 0, BufferSize)

        RunningBuffer &= New String(CurrentBuffer)

        If RunningBuffer.Contains(RowDelimiter) Then
            LineParts = RunningBuffer.Split(RowDelimiter)

            For I As Integer = 0 To LineParts.Count - 1
                If I < LineParts.Count - 1 Then

                    'Make synchronous call that blocks until' 
                    'another thread is available to process the line'
                    AddLineToTheProcessingQueue(CurrentLine)

                Else
                    RunningBuffer = LineParts(I)
                End If
            Next
        End If

    Loop While CurrentBlockSize = BufferSize
End Using
4

2 に答える 2

0

なぜこれを行う必要があるのか​​ 正確にはわかりませんが、BlockingCollectionまたはデータフローブロックをBoundedCapacityセットで使用することで、非常によく似たものを実現できます。

たとえば、キャパシティーを 1 に設定し、コンシューマーが現在ビジーである場合、コンシューマーの 1 つが現在の作業を終了してそのアイテムをキューから削除するまで、2 つ目のアイテムをキューに追加することはできません。どちらのバージョンでも、別の項目をキューに追加できるようになるまで待つことができます。

于 2013-04-25T10:01:18.353 に答える