返回一旦条件为真而不挂

时间:2017-07-11 22:46:40

标签: vb.net multithreading

所以我有这个计算工作,需要startng 6线程并等待那些完成。线程更改了类中的“本地”变量。 一旦局部变量是某个值,我想让函数返回“True”。但是,我想以一种不挂起线程的方式来做这件事。所以一个不变的“Do Loop”不会起作用。有没有标准的方法可以做到这一点?

Public Function Start(ByVal Cores As Integer) As Boolean
    For i = 0 To 10
      // Heavy work

        Task.Factory.StartNew(Sub() Compute(Core, StartInt, EndInt))

    Next

    Do // <- How to avoid checking ThreadsTerimnated = ThreadsStarted every clockcycle?
       // Threading.Sleep hangs thread.

        If ThreadsTerminated = ThreadsStarted Then
            MergeResults(Cores)
            Return True
        End If
    Loop

End Function

1 个答案:

答案 0 :(得分:4)

您可以保留Tasks的列表并使用Tasks.WaitAll

Dim tasks As New List(Of Task)
For i = 0 To 10
  // Heavy work
    tasks.Add(Task.Factory.StartNew(Sub() Compute(Core, StartInt, EndInt)))
Next

Task.WaitAll(tasks.ToArray())