【发布时间】:2020-09-17 02:15:57
【问题描述】:
我有一个小型控制台应用程序。它会检查一些设置,做出一些决定,然后发送电子邮件。问题是直到我的申请完成后才真正发送电子邮件。我希望在发送电子邮件的方法完成后立即发送电子邮件。
最初,我只是创建了一个 MailMessage 并调用 .Send()。就在那时,我注意到直到应用完成后才会发送邮件。
然后我尝试使用任务并行库。
var taskA = Task.Factory.StartNew(() => msg.Send());
同样,在我的整个应用程序完成之前不会发送消息。
我如何在msg.send 执行时而不是在应用程序完成时发送电子邮件?
【问题讨论】:
-
您有多大把握在应用关闭之前不会发送它? Send() 是一种同步方法。可能是 Smtp 服务器有延迟。
-
@Kevin - 我在逐步完成发送的方法后等待。 SMTPClient.Send() 已经执行,我正在使用另一种方法。我等待了 15 分钟以上,但收件箱中没有任何内容。我一按 F5,消息就会在应用程序完成后的一两秒内出现。如果我不等待(让应用程序在没有断点的情况下运行),消息会在一两秒内出现。
-
您的 SMTP 服务器是本地机器还是在另一台机器上?
-
@Kevin - SMTP 服务器在我们的 LAN 上,而不是本地。
-
我觉得这个场景很奇怪。我所能提供给您的只是尝试运行 Fiddler 并查看数据包何时发送到 SMTP 服务器。它应该在 .Send() 完成后立即发送,但您可以仔细检查,它可能会为您提供更多信息。