2013-03-17 5 views
20

Wird der neue Thread, der den Code wie den folgenden Code verwendet, nach der Rückgabe der Funktion automatisch beendet?Muss ich einen so geschriebenen Thread töten? Oder wird es automatisch enden?

Ich bin ziemlich neu zu threading, also fragte ich mich.

+0

Es ist immer eine gute Idee, Ihre Threads zu verwalten; unabhängig davon, wie Sie sie aufrufen. Mit der Garbage Collection können Objekte außerhalb des Geltungsbereichs gut verwaltet werden. Dies ist jedoch kein Ersatz für gute Programmierpraktiken. – Brian

+1

Es wird selbständig enden, aber Sie möchten es vielleicht zu einem Hintergrund-Thread machen, so dass es endet, wenn die Anwendung geschlossen wird, anstatt es geheim zu halten. Hängt von der Situation ab. – Ryan

+1

@Brian: Was bedeutet das und was hat Garbage Collection mit irgendetwas zu tun? – Ryan

Antwort

15

ist das in Ordnung ... wenn es ein Anliegen ist, dass das Thema möglicherweise nicht abgeschlossen ist, bevor die ausführbare Datei beendet wird, möchten Sie vielleicht:

new Thread(() => 
    { 
     function(); 
    }){IsBackground = true}.Start(); 

Hintergrund-Threads wird nicht verhindern, dass Ihre App vom Verlassen.

+0

Dank spender gelegt, ich denke, der einzige Fall, wo ich einen Thread versuchen würde und überdauern die ausführbare Datei ist, wenn die ausführbare Datei unerwartet abstürzt oder ein anderes Freak-Ereignis. – PhoenixLament

2

Ja, der Thread wird beendet, nachdem die Funktion abgeschlossen ist, aber wenn Sie nicht einen Parameter haben, den Sie innerhalb der Funktion verwenden müssen, würde ich es nicht so starten; Ich würde nur tun:

new Thread(function).Start(); 
+0

In den meisten Fällen sollten Sie keinen neuen Thread wie diesen starten. Überprüfen Sie, was TPL ist. – vittore

+0

Danke, ich habe einige Fälle des Codes, den ich mit Parametern gepostet habe, also nehme ich an, dass meine Methode richtig ist? – PhoenixLament

+1

Ja. Ich benutze Multithreading meine Anwendungen die ganze Zeit und in der Regel versuche ich zu vermeiden, Parameter für neue Threads zu haben. Das Starten von Threads ist sehr einfach und normalerweise müsstest du sie nur "töten", wenn sie in einer Schleife sind, wo sie sich selbst nicht beenden. – Naate

2

Obwohl es als Best Practice angesehen wird, um Ihre Threads zu verwalten, wenn Sie nicht an dem Ergebnis/Status des bestimmten Threads interessiert sind und nicht mit der Annullierung etc. befassen müssen, dann ist Ihr Vorgehen in Ordnung.

Es ist eine Überlegung wert, ob Sie für das, was Sie tun, einen dedizierten Thread benötigen. Wenn der Code, den Sie ausführen, relativ klein ist, sollten Sie stattdessen den ThreadPool über die TPL oder QueueUserWorkItem verwenden.

Verwandte Themen