0

私がやろうとしているのは、何らかのアクションを実行するアプリケーションを作成することです。最大10個のスレッドが実行されている必要があります。

私は次のコードを持っていますが、これは正常に機能します。「Somework」プロシージャにパラメータを送信する必要があります。どうやってやるの?

Module Module1
    Sub Main()
        Dim Task As New Action(AddressOf SomeWork)

        dim I as integer

        for i=1 to 20
        If RunningThread < 10 Then
            Task.BeginInvoke(AddressOf Callback, Nothing)
            Threading.Interlocked.Increment(RunningThread)
        Else
            SyncLock (Lock)
                tasks.Enqueue(Task)
            End SyncLock
        End If
        next

        Console.ReadLine()
    End Sub

    Private tasks As New Queue(Of action)
    Private RunningThread As Integer
    Private Lock As New Object

    Dim I As Integer = 0

    Private Sub SomeWork()
        I += 1
        Console.WriteLine(I & " doing some work - begin :: " & Now.ToString)
        Threading.Thread.Sleep(10000)
        Console.WriteLine(I & " doing some work - end :: " & Now.ToString)
    End Sub

    Private Sub Callback(ByVal o As Object)
        If tasks.Count > 0 Then
            Dim Task As Action
            SyncLock (Lock)
                Task = tasks.Dequeue
            End SyncLock
            Task.BeginInvoke(AddressOf Callback, Nothing)
        Else
            Threading.Interlocked.Decrement(RunningThread)
        End If
    End Sub
End Module

親切に助けてください。

ありがとう

4

1 に答える 1

2

Parallel.ForEachを使用したタスク並列ライブラリ(TPL)を使用すると、要件を簡単に達成できます。ParallelOptionsパラメーターを指定し、MaxDegreeOfParallelismをスレッド制限に設定できるコンストラクターを使用します。

于 2012-07-11T16:26:44.967 に答える