Est-il sage d'utiliser SMTP.SendAsync en asp.net
Question
J'écris un code qui envoie 2 codes à 2 e-mails différents (pour vérifier que le propriétaire des deux e-mails sont la même personne). Et je suis l'erreur:
System.InvalidOperationException: Un appel asynchrone est déjà en cours. Il doit être complété ou annulé avant de pouvoir appeler cette méthode.
Eh bien, je peux simplement éviter cette erreur d'envoi du second e-mail après l'envoi du premier finalise, mais la question est que si tant d'utilisateurs dans le même courriel de demande de temps d'envoi (mot de passe oublié, changement de courrier électronique, l'enregistrement , ...) serait-il causer des problèmes? ou j'obtenir cette erreur seulement quand ils sont exécutés de façon répétée à la même page?
Merci à l'avance,
Ashkan
La solution
Le but de la méthode est SendAsync ne pas bloquer le thread appelant; Cependant, vous devez attendre la méthode SendAsync à la fin avant de pouvoir envoyer un nouveau message sur la même instance de SmtpClient. En d'autres termes, créer 2 cas, un pour chaque e-mail, et de les envoyer à la fois de manière asynchrone si vous voulez.
Après avoir appelé SendAsync, vous devez attendre la transmission e-mail à compléter avant de tenter d'envoyer un message électronique à l'aide Envoyer ou SendAsync.
Autres conseils
Comme Icare a souligné, il faut attendre que le SendAsync
à la fin avant de l'appeler sur la même instance. En plus de cela, il est possible d'avoir faim de ThreadPool
, mais votre kilométrage varie en fonction de votre mise en œuvre. En interne, SendMailAsync
utilise un fil de ThreadPool
pour effectuer la tâche. Je ne serais pas inquiet si elle est juste un e-mail ici et là cependant.
Aucun cas distincts ne sera pas un problème. si de nombreux utilisateurs envoient des requêtes en même temps, ils seront chacun des cas différents.