SmtpClient.SendAsync revisione del codice
-
28-09-2019 - |
Domanda
Qual è il modo corretto di smaltire SmtpClient
e MailMessage
durante l'utilizzo SendAsync
?
Ho copiato il mio codice qui sotto.
{
...
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();
}
Smaltimento l'MailMessage
dopo la client.SendAsync(...)
genera un'eccezione. Ho bisogno di smaltire nel gestore di richiamata.
Soluzione
Questo è corretto.
Si noti che MailMessage
non ridefinisce ToString
, in modo che le log semplicemente dire [MailMessage] Send cancelled
.
Si potrebbe desiderare di utilizzare la proeprty Subject
(o qualche altra proprietà), invece.
Altri suggerimenti
Credo che questo potrebbe aiutare
client.SendCompleted += (s, e) => { client.Dispose(); message.Dispose(); };
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow