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

Était-ce utile?

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.

De MSDN:

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top