2016-12-27 5 views
0

Ich muss eine Aufgaben auf einer Liste von Parametern tun: alle diese Aufgaben sind unabhängig. Ich sehe nicht, wie es geht .. Ich habe versucht, die Parameter in eine "shared class" zu teilen und eine andere Instanz einer Klasse für jedes Element in der Liste zu machen, und dann die Funktion für jede Instanz asynchron starten:VB.NET Multithreading

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 

==> Task ist nicht definiert ...

.NET Framework 3.0 VS 2015

Irgendwelche Ideen?

Antwort

1

Die Schlüsselwörter Async und Await sind in .NET 3.0 nicht verfügbar. Sie wurden in .NET 4.5 eingeführt, obwohl Sie sie bereits in 4.0 verwenden können (mit einigen Modifikationen, wie die Verwendung von TaskEx anstelle von Task für einige der statischen Funktionen), wenn Sie das Microsoft.Bcl.Async-Paket über importieren NuGet.

Sie können natürlich einfach neue Threads starten, ohne Async/Await verwenden zu müssen.

Oder Sie könnten die ThreadPool verwenden. Hier ist ein Code, den ich in der Vergangenheit gemacht habe, der ursprünglich in C# geschrieben wurde. Ich habe es jetzt konvertiert und die Teile entfernt, die mindestens .NET 4.0 benötigen. Habe es aber nicht getestet.

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 

In der Version 4.0 ich es in einer Weise geschrieben hatte, die mich für alle Workitems warten lassen würde, nachdem abgeschlossen werden es dem Threadpool Vorlage durch einen CountdownEvent verwenden. Aber diese Klasse existiert nur seit 4.0, also habe ich sie entfernt. Möglicherweise müssen Sie einen anderen Weg finden, wenn Sie auf alles warten müssen.

+0

Danke für Ihre Antwort. Leider kann ich aufgrund der Art und Weise, wie ich die DLL verwende, kein neueres Framework verwenden. Gibt es eine Möglichkeit Multithreading in Framework 3.0 durchzuführen? – Pierre

+0

Überprüfen Sie meine Bearbeitung. Habe es nicht getestet, sollte aber theoretisch funktionieren. –

+0

Danke, ich passe das an, es scheint gut zu funktionieren! – Pierre