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

È stato utile?

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.

Da msdn:

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top