【发布时间】:2017-03-09 16:52:23
【问题描述】:
我有一个控制台应用程序,它在运行时通过 googles smtp 客户端发送电子邮件。
代码:
private void SendEmailThread(MailMessage message)
{
Thread thread = new Thread(() => _mailService.SendEmail(message));
thread.Start();
thread.Join();
}
我如何知道所有线程何时完成?
所有完成后是否有一个全局属性设置为ThreadsRunning = 0?
我想在发送完所有电子邮件后向控制台发送一条消息,并且在我没有更多线程时完成。
类似:
if(allThreadsDone){
Console.WriteLine("All mails are sent");
}
【问题讨论】:
-
查看这些问题:Suspending and notifying threads when there is work to do 和 C# equivalent to java's wait and notify?。如果您不想要专门的电子邮件发件人线程,请查看
Task.Run。 -
从外观上看,您的代码与
_mailService.SendEmail(message);基本相同,因为您使用的是等待线程完成的Join。 -
来自 MSDN:阻塞调用线程,直到此实例表示的线程终止,同时继续执行标准 COM 和 SendMessage 泵送。
-
@TheLethalCoder SendEmailThread 方法在循环内被调用。换句话说,我希望它能够继续处理下一封电子邮件,即使当前一封有延迟或出现故障
标签: c# multithreading