J'ai le code suivant:
public static void Send(this MailMessage email)
{
if (!isInitialized)
Initialize(false);
//smtpClient.SendAsync(email, "");
email.IsBodyHtml = true;
Thread mailThread = new Thread(new ParameterizedThreadStart(
(o) =>
{
var m = o as MailMessage;
SmtpClient client= new SmtpClient("smtpserveraddress");
client.Send(m);
}));
mailThread.Start(email);
Je souhaite que l'envoi du courrier se fasse en arrière-plan sans interférer avec le fil principal. Je m'en fiche quand c'est fini.
Dois-je en quelque sorte gérer la disposition du thread créé (mailThread)? Ou se débarrasse-t-il automatiquement une fois son travail terminé?
Veuillez ne pas recommander la méthode SendAsync. Je voudrais créer le fil manuellement. Mail.Send n'était qu'un exemple de scénario.
Je vous remercie.
NON!
il n'est pas nécessaire de supprimer l'objet Thread (ENTRE, la classe Thread ne fournit pas la méthode Dispose).
[._________.] Donc NON, vous n'êtes pas obligé de le faire, ce n'est pas nécessaire (ni possible je pense).
Eh bien, votre SmtpClient
devrait être Dispose()
'd. J'utiliserais la bibliothèque parallèle de tâches au lieu de créer des threads bruts:
public static void Send(this MailMessage email)
{
if (!isInitialized)
Initialize(false);
//smtpClient.SendAsync(email, "");
email.IsBodyHtml = true;
Task.Factory.StartNew(() =>
{
// Make sure your caller Dispose()'s the email it passes in at some point!
using (SmtpClient client = new SmtpClient("smtpserveraddress"))
{
client.Send(email);
}
});
}