所以我知道你不应该使用
Thread.Abort()
Run Code Online (Sandbox Code Playgroud)
但我从未得到过很好的解释.是否存在性能损失或隐藏的问题?
我知道你不能忽略/吞下ThreadAbortException(这是有道理的)
我有以下代码:
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);
Run Code Online (Sandbox Code Playgroud)
我希望邮件发送在后台完成而不会干扰主线程.它完蛋后我不在乎.
我是否需要以某种方式处理已创建线程(mailThread)的处理?或者它在完成工作后会自动处理?
请不要推荐SendAsync方法.我想手动创建线程.Mail.Send只是一个示例场景.
谢谢.
假设我有如下代码:
int Main()
{
if (true)
{
new Thread(()=>
{
doSomeLengthyOperation();
}).Start();
}
while (true)
{
//do nothing
}
}
Run Code Online (Sandbox Code Playgroud)
有2个线程,我会打电话给主线程正在执行main()函数的线程,该线程被new'ed了里面的"如果"测试为主题A.
我的问题是,线程A什么时候被销毁?do doSomeLenghtyOperation()能够完成吗?
由于没有指向线程A的引用,它是否会被标记为垃圾收集的候选者:
我看到的所有示例都是Main()持有引用,然后主线程在退出之前等待与线程A连接.我很好奇上面代码的生命周期是什么.
提前致谢!
我有以下代码:
new Thread(new ThreadStart(delegate()
{
while (true)
{
//something
}
})).Start();
Run Code Online (Sandbox Code Playgroud)
垃圾收集器Thread可以在Running状态下完成此实例吗?