Ответ 1
НЕТ!
нет необходимости удалять объект Thread (BTW, класс Thread не предоставляет метод Dispose).
У меня есть следующий код:
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 был всего лишь примерным сценарием.
Спасибо.
НЕТ!
нет необходимости удалять объект Thread (BTW, класс Thread не предоставляет метод Dispose).
Нить сбрасывается, когда ее рутина заканчивается.
Так что НЕТ, вам не нужно это делать, это не нужно (я думаю, что это невозможно).
Ну, ваш 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);
}
});
}