我的SendMailAsync
例程有问题。在ContinueWith()
方法中我使用的是SendMailContinuation()
方法,其中task.IsCanceled
始终为真。
网络版本4.6.1
private void SendEMail()
{
try
{
using (SmtpClient smtpClient = new SmtpClient(EmailServerAddress))
{
_logger.Info("Sending Email to: {0} ", recipient);
MailAddress from = new MailAddress(EmailAddress, EmailAddress, Encoding.UTF8),
to = new MailAddress(recipient, recipient, Encoding.UTF8);
using (MailMessage message = new MailMessage(from, to))
{
message.SubjectEncoding = Encoding.UTF8;
message.Priority = MailPriority.High;
message.Body = "";
message.BodyEncoding = Encoding.UTF8;
smtpClient.Credentials = new NetworkCredential(UserName, UserPassword);
smtpClient.SendMailAsync(message)
.ContinueWith(SendMailContinuation);
}
}
catch (Exception ex)
{
_logger.Error(ex);
}
}
private void SendMailContinuation(Task task)
{
if (task.IsFaulted)
{
_logger.Error(task.Exception);
}
else if (task.IsCanceled)
{
_logger.Warn(task.Status);
}
}
您应该等待smtpClient。SendMailAsync((函数。您可以通过将函数"SendEMail(("设置为异步任务并在smtpClient之前添加wait来实现这一点。SendMailAsync((调用。