2016-12-27 85 views
0

我需要在參數列表上做一個taks:所有這些任務是獨立的。 我不明白怎麼做..我試圖將參數分成一個「共享類」,併爲列表中的每個項目創建一個類的不同實例,然後以異步方式在每個實例上啓動該函數:VB.NET多線程

Imports System.Runtime.InteropServices 
Imports System.IO 
Public Class DataContainer 
    Public Parameters as double 'obviously simplified code ;-) 
End Class 
Public Class JobDoer 
    Public CommonData As DataContainer 
    Public PrivData as double 
    Public Async Function YesWeCan() As Task(Of Boolean) 
     Return Task.Factory.StartNew(Of Boolean)(
      DoIt(CommonData.Parameters , PrivData) 
     ) 

    End Function 
    Public Function DoIt(a as double,b as double) 
     return 0 
    end function 
End Class 

==>任務沒有定義...

.NET框架3.0 VS 2015年

任何想法?

回答

1

The Async and Await關鍵字在.NET 3.0中不可用。它們已經在.NET 4.5中引入,儘管您已經可以在4.0中使用它們(有些修改,比如對於某些靜態函數,必須使用TaskEx而不是Task),如果通過導入Microsoft.Bcl.Async包的NuGet。

你當然可以簡單地開始新線程而不必使用Async/Await。可以使用ThreadPool。以下是我過去創建的一些代碼,最初是用C#編寫的。我現在將其轉換並刪除了至少需要.NET 4.0的部分。雖然沒有測試過。

Private Sub SubmitWorkToThreadPool() 
    For i as Integer = 0 To yourWorkItems.Count 'Adjust this loop so it adds all your tasks to the thread pool. 
     'customParameter is passed as parameter 'state' to the DoParallelWork function. 
     ThreadPool.QueueUserWorkItem(AddressOf DoParallelWork, customParameter) 
    Next 
End Sub 

Private Sub DoParallelWork(state As Object) 
    'TODO: Add code to be executed on the threadpool 
End Sub 

在4.0版本把它寫的方式,讓我等待所有工作項目使用CountdownEvent其提交給線程池之後完成。但是這個類只存在於4.0之後,所以我刪除了它。如果您需要等待一切完成,您可能需要找到另一種方式。

+0

感謝您的回答。不幸的是,我不能使用更新的框架,因爲我使用DLL的方式......有沒有辦法在框架3.0中做多線程? – Pierre

+0

檢查我的編輯。沒有測試它,但應該在理論上工作。 –

+0

謝謝,我正在適應這一點,它似乎工作正常! – Pierre