Quelle est la bonne façon de disposer de SmtpClient
et MailMessage
tout en utilisant SendAsync
?SmtpClient.SendAsync code revue
J'ai copié mon code ci-dessous.
{
...
var client = new SmtpClient {Host = _smtpServer};
client.SendCompleted += SendCompletedCallback;
var userState = mailMessage;
client.SendAsync(mailMessage, userState);
...
}
private static void SendCompletedCallback(object sender,
AsyncCompletedEventArgs e)
{
// Get the unique identifier for this asynchronous operation.
var mailMessage= (MailMessage)e.UserState;
if (e.Cancelled)
{
Log.Info(String.Format("[{0}] Send canceled.", mailMessage));
}
if (e.Error != null)
{
Log.Error(String.Format("[{0}] {1}", mailMessage, e.Error));
}
else
{
Log.Info("Message sent.");
}
mailMessage.Dispose();
}
le MailMessage
après Mise au rebut du client.SendAsync(...)
lève une exception. Je dois le disposer dans le gestionnaire de rappel.
j'induits en erreur à cause de cet exemple de msdn http://msdn.microsoft.com/en-us/library/system.net.mail.smtpclient.aspx où ils disposent du mailMessage dans la fonction principale et non dans le rappel. –
@Lieven Cardoen, la raison est, l'exemple utiliser une console et attendre l'entrée de l'utilisateur – Fredou
Ok, merci pour le commentaire ToString. –