È saggio usare SMTP.Sendasync in ASP.NET
Domanda
Sto scrivendo un codice che invia 2 codici a 2 e -mail diverse (per verificare che il proprietario di entrambe le e -mail sia la stessa persona). E ho ricevuto l'errore:
System.InvalidoperationException: è già in corso una chiamata asincrona. Deve essere completato o annullato prima di poter chiamare questo metodo.
Beh, posso semplicemente evitare questo errore di inviare la seconda e -mail dopo l'invio del primo completamento, ma la domanda è che se così tanti utenti contemporaneamente richiedono l'invio e -mail (password dimenticata, modifica della posta elettronica, registrazione, ...) Causa problemi? Oppure riceverò questo errore solo quando verranno eseguiti ripetutamente nella stessa pagina?
Grazie in anticipo,
Ashkan
Soluzione
Lo scopo del metodo SendAsync non è bloccare il thread chiamante; Tuttavia, è necessario attendere che il metodo SendAsync finisca prima di poter inviare una nuova e -mail sulla stessa istanza SMTPClient. In altre parole, crea 2 istanze, una per ogni e -mail, e inviali entrambi in modo asincrono se lo desideri.
Dopo aver chiamato SendAsync, è necessario attendere che la trasmissione e-mail sia completata prima di tentare di inviare un altro messaggio di posta elettronica utilizzando Send o SendAsync.
Altri suggerimenti
Come ha sottolineato Icarus, devi aspettare il SendAsync
Per finire prima di chiamarlo sulla stessa istanza. Oltre a ciò, è possibile averlo ThreadPool
La fame, ma il tuo chilometraggio varierà in base all'implementazione. Internamente, SendMailAsync
usa un ThreadPool
Discussione per eseguire l'attività. Non mi preoccuperei se fosse solo un'e -mail qua e là.
Nessuna istanza separata non sarà un problema. Se molti utenti inviano richieste contemporaneamente, ciascuno saranno istanze diverse.