2016-12-27 4 views
0

私はパラメータのリストでタスクを実行する必要があります。これらのタスクはすべて独立しています。 私はそれを行う方法が表示されません..私は1つの "共有クラス"にパラメータを分割し、リスト内の各項目のクラスの別のインスタンスを作成し、各インスタンスで関数を非同期に起動しようとしました: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

AsyncおよびAwaitキーワードは.NET 3.0では使用できません。それらは.NET 4.5で導入されていますが、Microsoft.Bcl.Asyncパッケージを経由してインポートする場合は、既にいくつかの変更を加えて、Taskの代わりにTaskExを使用する必要があります。 NuGet。

もちろん、Async/Awaitを使わなくても新しいスレッドを開始することができます。

ThreadPoolを使用することもできます。ここでは、元々はC#で書かれた過去のコードを紹介します。今すぐ変換し、少なくとも.NET 4.0が必要な部分を削除しました。しかし、それをテストしていない。私はそれが私がCountdownEventを使用してスレッドプールにそれを提出した後に完了するすべての作業項目を待つことが可能になるように書かれていた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以降しか存在しないので、削除しました。すべてが完了するのを待つ必要がある場合は、別の方法を見つけなければならないかもしれません。

+0

ご回答ありがとうございます。残念ながら、私はDLLを使用する方法のために、最近のフレームワークを使用することはできません...フレームワーク3.0でマルチスレッドを行う方法はありますか? – Pierre

+0

私の編集をチェックしてください。それをテストしませんでしたが、理論的には動作するはずです。 –

+0

ありがとう、私はこれを適応している、それはうまくいくようだ! – Pierre