2012-05-22 5 views
25

Ich habe den folgenden Code:Müssen wir nach der Verwendung einen Thread in C# entsorgen oder beenden?

 public static void Send(this MailMessage email) 
    { 
     if (!isInitialized) 
      Initialize(false); 
     //smtpClient.SendAsync(email, ""); 
     email.IsBodyHtml = true; 

     Thread mailThread = new Thread(new ParameterizedThreadStart(
      (o) => 
      { 
       var m = o as MailMessage; 

       SmtpClient client= new SmtpClient("smtpserveraddress"); 
       client.Send(m); 

      })); 
     mailThread.Start(email); 

ich die Mail wollen sendet mit dem Haupt-Thread, ohne sich im Hintergrund durchgeführt werden. Es ist mir egal, wenn es fertig ist.

Muss ich irgendwie mit der Entsorgung des erstellten Threads umgehen (mailThread)? Oder entsorgt es automatisch, wenn es seine Arbeit beendet hat?

Empfehlen Sie die SendAsync-Methode nicht. Ich möchte den Thread manuell erstellen. Mail.Send war nur ein Beispielszenario.

Vielen Dank.

Antwort

33

NEIN!

Es gibt keine Notwendigkeit, das Thread-Objekt zu entsorgen (BTW, die Thread-Klasse bietet nicht die Dispose-Methode).

7

Der Thread wird ausgegeben, wenn seine Routine zu Ende geht.
Also NEIN, du musst es nicht tun, es ist nicht notwendig (noch möglich, denke ich).

+5

Aber nicht das Thread-Objekt. Das Thread-Objekt ist sofort für die Garbage Collection geeignet. http://stackoverflow.com/questions/3699147/c-sharp-thread-object-lifetime –

1

Nun, Ihre SmtpClient sollte Dispose() 'd sein. Ich würde die Task Parallel Library verwenden, anstatt rohe Threads zu erstellen:

+0

Als eine Randnotiz, wenn jemand beschließt, diese Methode in einer ASP.Net-Anwendung aufzurufen, wird der Thread zu diesem Aufruf verwendet werden eine aus dem Anwendungspool, und mit genügend dieser Arten von Aufrufen kann technisch den IIS-Thread-Pool verhungern. Beim Erstellen eines neuen Threads hat "neues Thread" dieses Problem nicht (obwohl beim Erstellen des Threads ein neuer Overhead entsteht). –

+0

Sie sollten immer auf Aufgaben warten. Siehe meine Frage unter http://stackoverflow.com/questions/14346108/what-happens-to-work-scheduled-by-task-run-after-the-the-program-terminates –

Verwandte Themen