Ich lerne gerade über die neuen Threading- und Parallel-Bibliotheken in .Net 4
In der Vergangenheit würde ich so einen neuen Thread erstellen (als Beispiel):
DataInThread = new Thread(new ThreadStart(ThreadProcedure));
DataInThread.IsBackground = true;
DataInThread.Start();
Jetzt kann ich machen:
Task t = Task.Factory.StartNew(() =>
{
ThreadProcedure();
});
Was ist der Unterschied, wenn überhaupt?
Vielen Dank
Es gibt einen großen Unterschied. Aufgaben werden im ThreadPool geplant und können bei Bedarf sogar synchron ausgeführt werden.
Wenn Sie lange im Hintergrund arbeiten, sollten Sie dies mit der richtigen Aufgabenoption angeben.
Sie sollten Task Parallel Library der expliziten Thread-Verarbeitung vorziehen, da diese mehr optimiert ist. Sie haben auch mehr Funktionen wie Fortsetzung.
Die Aufgabe gibt Ihnen die Güte der Aufgaben-API:
Task.ContinueWith
)Beachten Sie, dass Sie in beiden Fällen Ihren Code mit Methodengruppenkonvertierungen etwas vereinfachen können:
DataInThread = new Thread(ThreadProcedure);
// Or...
Task t = Task.Factory.StartNew(ThreadProcedure);
Im ersten Fall starten Sie einfach einen neuen Thread, während Sie im zweiten Fall in den Thread-Pool einsteigen.
Der Thread Pool Job soll Threads gemeinsam nutzen und wiederverwenden. Dadurch können Sie nicht jedes Mal ein paar Millisekunden verlieren, wenn Sie einen neuen Thread erstellen müssen.
Es gibt mehrere Möglichkeiten, den Thread-Pool aufzurufen:
Ihr erster Codeblock weist CLR an, einen Thread (z. B. T) für Sie zu erstellen, der als Hintergrund ausgeführt werden kann (verwenden Sie Thread-Pool-Threads, wenn Sie T planen). Kurz gesagt, bitten Sie CLR explizit, einen Thread zu erstellen, damit Sie etwas tun können, und rufen die Start () - Methode auf, um den Thread zu starten.
Ihr zweiter Codeblock tut dasselbe, delegiert jedoch implizit die Verantwortung für das Erstellen eines Threads (Hintergrund, der erneut im Thread-Pool ausgeführt wird) und den Start-Thread durch die StartNew-Methode in der Task Factory-Implementierung.
Dies ist ein schneller Unterschied zwischen den angegebenen Codeblöcken. Allerdings gibt es wenige detaillierte Unterschiede, die Sie googeln oder andere Antworten von meinen Mitwirkenden sehen können.