我们是否需要在使用后释放或终止 C# 中的线程
本文关键字:终止 线程 释放 是否 我们 | 更新日期: 2023-09-27 18:35:06
我有以下代码:
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)的处置?还是在完成工作时自动处置?
请不要推荐发送异步方法。我想手动创建线程。Mail.Send只是一个示例场景。
谢谢。
不!
不需要释放 Thread 对象(顺便说一句,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()'s the email it passes in at some point!
using (SmtpClient client = new SmtpClient("smtpserveraddress"))
{
client.Send(email);
}
});
}