在我最近接管的一個項目中,有一個調用函數做了一些計算;這被連續調用幾次(通常在1到10次之間)。關於vb.net中後臺處理的建議
While dr.read ‘depending on a db call, loop 1 or more times
Dim calc As New CalcClass
Dim newDoStuff As New System.Threading.Thread(New System.Threading.ParameterizedThreadStart(AddressOf DoStuff))
newDoStuff.Start(calc)
End while
Private Sub DoStuff(ByVal calc As Object)
‘do something that takes between 5-10 seconds
End sub
爲了加快這,我嘗試添加的異步處理(見上面的例子),這部作品在我的代碼,所有的任務都在同一時間內完成,但我不明白的是在完成所有任務完成後需要運行的最終任務之前,如何等待所有這些線程完成(沒有設定數量的線程,取決於其他數據,它可以在1到10之間)。
任何人都可以提出一個方法來做到這一點 - 我正在尋找一種簡單的方法基本上說:「好了,所有的任務都在這一點後,調用另一個任務」
懸崖
- 一些任務需要在同一時間(1到10之間)
- 每個任務需要幾秒鐘
- 代碼當前工作運行 - 它確實他們都在同一時間
- 一旦(1-10之間)中的所有任務都完成 ,火了一些其他的代碼(僅當所有任務都完成) - 停留在最好的方法做以下
如果可以的話,我想這個返工使用Parrel任務庫。雖然在其他線程上等待的方法稱爲'Join'。在這裏閱讀有關它:http://msdn.microsoft.com/en-us/library/95hbf2ta.aspx – asawyer 2012-03-06 16:46:28
我不知道有一種方法來等待線程完成而不使用回調。我建議不要爲每個任務啓動一個線程,可能將它們合併爲多個任務,並報告每個組的狀態。 – 2012-03-06 17:15:21
@asawyer - 雖然你的建議是健全的。 TPL尚未準備好迎接黃金時段。根據我的理解,它將包含在.NET Framework 4.5中。他不需要使用TPL來使用Thread.Join方法。你必須小心Thread.Join,你可以很容易造成自己的僵局。 – 2012-03-06 17:18:34