Fornire più callback di SendCompleted a SmtpClient

1

Ho una classe Email che ha un metodo Send che accetta facoltativamente SmtpClient e invia un'email in modo asincrono utilizzando SendAsync . Se non viene fornito SmtpClient a questo metodo, crea un'istanza predefinita SmtpClient e la utilizza per inviare l'e-mail. All'interno della funzione Send , fornisco un SendCompleted callback che dispone del MailMessage e del default SmtpClient se non ne è stato fornito uno al metodo.

Quindi, quando fornisco SmtpClient , come faccio a smaltirlo?

Non posso eliminarlo all'interno di Send perché potrebbe essere usato per inviare altre email, inoltre suppongo che sia la responsabilità della cosa che ha istanziato il passato in SmtpClient a eliminarlo di nuovo. È possibile aggiungere più callback SendCompleted al SmtpClient che viene eseguito uno dopo l'altro?

    
posta ajbeaven 24.06.2013 - 08:36
fonte

1 risposta

1

Ci sono due modi principali per distruggere gli oggetti SmtpClient .

  1. Il SmtpClient gestisce la propria durata (cioè si distrugge da solo quando arriva il momento). Questo è più semplice se ogni SmtpClient viene utilizzato per una sola e-mail, ma può essere fatto funzionare per più, se SmtpClient sa quanti e-mail ha inviato e si può garantire che la richiamata di SendCompleted sia invocata una corrispondente numero di volte.
  2. Un componente esterno gestisce la durata di SmtpClient (questo può essere l'oggetto che ha creato SmtpClient o qualche altro oggetto). In questo caso, SmtpClient deve informare l'oggetto responsabile della gestione della sua durata circa la chiamata di SendCompleted invocata. Questo di solito viene fatto richiamando un callback su quell'oggetto da SendCompleted .
risposta data 24.06.2013 - 09:37
fonte

Leggi altre domande sui tag