问题
I have the following code:
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);
I want the mail sending to be done in the background without interfering with the main thread. I do not care when it is finished.
Do I need to somehow handle the dispose of the created thread (mailThread)? Or does it automatically dispose when it finishes its job?
Please do not recommend the SendAsync method. I would like to create the thread manually. Mail.Send was only an example scenario.
Thank you.
回答1:
NO!
there is no need to dispose the Thread object (BTW, the Thread class does not provide the Dispose method).
回答2:
Thread is diposed when its routine comes at end.
So NO, you don't have to do it, it's not necessary (nor possible I think).
回答3:
Well, your SmtpClient
should be Dispose()
'd. I'd use the Task Parallel Library instead of creating raw threads:
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()'s the email it passes in at some point!
using (SmtpClient client = new SmtpClient("smtpserveraddress"))
{
client.Send(email);
}
});
}
来源:https://stackoverflow.com/questions/10698107/do-we-need-to-dispose-or-terminate-a-thread-in-c-sharp-after-usage