Подтвердить что ты не робот

Нужно ли нам утилизировать или прекращать поток на С# после использования?

У меня есть следующий код:

        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 был всего лишь примерным сценарием.

Спасибо.

4b9b3361

Ответ 1

НЕТ!

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

Ответ 2

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

Ответ 3

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

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

    Task.Factory.StartNew(() =>
    {
        // Make sure your caller Dispose() the email it passes in at some point!
        using (SmtpClient client = new SmtpClient("smtpserveraddress"))
        {
            client.Send(email);
        }
    });
}