2017-07-11 51 views
3

所以我有這個計算工作,這需要startng 6個線程,並等待這些完成。線程更改類中的「本地」變量。 一旦局部變量爲特定值,我想讓函數返回「真」。但是,我想以一種不掛斷線的方式來做到這一點。所以一個不變的「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 
+0

你可能想知道,如果你需要暫停線程,但不掛了,你可以叫'等待Task.Delay( )'這將停止指定毫秒的處理而不阻塞那裏的線程。因爲你考慮暫停線程 – Fabulous

回答

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()) 
+1

'Task.WhenAll'也是一個選項,所以我只是把它作爲一個參考。 https://stackoverflow.com/a/6123432/2084315 – ps2goat

+0

完美。正是我在找的東西。 – Ruse

+2

這個答案沒有任何意義 - 'WaitAll'肯定會「掛斷線索」 - 一些解釋爲什麼它甚至與問題相關將會很好。 –

相關問題