C# 异步发送电子邮件并进行处理

C# 异步发送电子邮件并进行处理,c#,asynchronous,async-await,smtpclient,mailmessage,C#,Asynchronous,Async Await,Smtpclient,Mailmessage,如果我将mail.Dispose()放在末尾,则在SendMailAsync()完成调用后,是否总是调用mail.Dispose()?例如,如果我正在调用Post()一千次,那么应该在发送每封电子邮件后调用dispose 这是我的密码: public async Task Post(NotificationData notification) { MailMessage mail = new MailMessage(); mail.To.Add(new MailAddress(n

如果我将
mail.Dispose()
放在末尾,则在
SendMailAsync()
完成调用后,是否总是调用
mail.Dispose()
?例如,如果我正在调用
Post()
一千次,那么应该在发送每封电子邮件后调用dispose

这是我的密码:

public async Task Post(NotificationData notification)
{
    MailMessage mail = new MailMessage();
    mail.To.Add(new MailAddress(notification.Email));
    mail.Subject = notification.Subject;
    mail.Body = notification.Body;

    using (SmtpClient smtp = new SmtpClient())
    {
        smtp.SendCompleted += new SendCompletedEventHandler(SmtpClient_SendCompleted);
        await smtp.SendMailAsync(mail);
    }

    mail.Dispose();
}

您可以使用另一个using来包装邮件。您不需要显式调用Dispose,除非邮件包含我在您的代码中没有看到的附件。@DanielA.White我更新了帖子,将邮件放入using语句中,并在其中分配SmtpClient。那应该没问题吧?@Win明白了,我会允许附件,但这就是我的目的now@Win一般来说,如果它实现了
Dispose
,则应该调用它。在这种情况下,
MailMessage
public async Task Post(NotificationData notification)
{
    using (MailMessage mail = new MailMessage())
    {
        mail.To.Add(new MailAddress(notification.Email));
        mail.Subject = notification.Subject;
        mail.Body = notification.Body;

        using (SmtpClient smtp = new SmtpClient())
        {
            smtp.SendCompleted += new SendCompletedEventHandler(SmtpClient_SendCompleted);
            await smtp.SendMailAsync(mail);
        }
    }
}