2012-05-22 2 views
25

У меня есть следующий код:Нужно ли нам утилизировать или прекращать поток в C# после использования?

 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); 

Я хочу отправки почты, чтобы сделать в фоновом режиме, не мешая основной нити. Мне все равно, когда все будет готово.

Нужно ли мне как-то обрабатывать созданный поток (mailThread)? Или он автоматически распоряжается, когда он заканчивает свою работу?

Пожалуйста, не рекомендуем метод SendAsync. Я хотел бы создать поток вручную. Mail.Send был только примерным сценарием.

спасибо.

ответ

33

NO!

нет необходимости удалять объект Thread (BTW, класс Thread не предоставляет метод Dispose).

7

Резьба диспидирована, когда ее рутина заканчивается.
НЕТ, вам не обязательно это делать, это не обязательно (и, возможно, я думаю).

+5

Но не объект нити. Объект нити сразу же подходит для сбора мусора. http://stackoverflow.com/questions/3699147/c-sharp-thread-object-lifetime –

1

Ну, ваш SmtpClient должен быть Dispose() 'd. Я бы использовал параллельную библиотеку задач вместо создания необработанных потоков:

+0

В качестве побочного примечания, если кто-то решает вызвать этот метод в приложении ASP.Net, поток, используемый для выполнения этого вызова, будет один из пула приложений и с достаточным количеством этих типов вызовов может технически голодать пул потоков IIS. Создание нового потока 'new Thread' не имеет этой проблемы (хотя создает новые накладные расходы при создании потока). –

+0

Вы всегда должны ждать выполнения задач. См. Мой вопрос по адресу http://stackoverflow.com/questions/14346108/what-happens-to-work-scheduled-by-task-run-after-the-program-terminates –