2017-02-22 49 views
1

Будет ли вызываться 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(); 
} 
+3

можно обернуть Лобовое почту в другой, используя. –

+0

Вам не нужно явно вызывать Dispose, если в почтовом сообщении нет вложений *, которые я не вижу в вашем коде *. – Win

+0

@ DanielA.White Я обновил сообщение, разместив MailMessage в используемом выражении и закрою SmtpClient. Так должно быть хорошо? –

ответ

1
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); 
     } 
    } 
}