Frage

Ich schreibe einen Code, der 2 Codes an 2 verschiedene E -Mails sendet (um zu überprüfen, ob der Eigentümer beider E -Mails dieselbe Person ist). Und ich habe den Fehler bekommen:

System.invalidoperationException: Ein asynchroner Aufruf ist bereits im Gange. Es muss abgeschlossen oder storniert werden, bevor Sie diese Methode aufrufen können.

Nun, ich kann einfach vermeiden, dass dieser Fehler die zweite E -Mail nach dem Senden des ersten Senders sendet es verursacht ein Problem? Oder werde ich diesen Fehler nur bekommen, wenn sie wiederholt auf derselben Seite ausgeführt werden?

Danke im Voraus,
Ashkan

War es hilfreich?

Lösung

Der Zweck der SendaSync -Methode besteht nicht darin, den aufrufenden Thread zu blockieren. Sie müssen jedoch darauf warten, dass die SendaSync -Methode fertiggestellt wird, bevor Sie eine neue E -Mail an derselben SMTPClient -Instanz senden können. Mit anderen Worten, erstellen Sie 2 Instanzen, eine für jede E -Mail, und senden Sie sie beide asynchron, wenn Sie möchten.

Von msdn:

Nach dem Aufrufen von SendaSync müssen Sie warten, bis die E-Mail-Übertragung abgeschlossen ist, bevor Sie versuchen, eine andere E-Mail-Nachricht mit Sendasync zu senden.

Andere Tipps

Wie Ikarus betonte, müssen Sie auf die warten SendAsync zu beenden, bevor es auf derselben Instanz aufgerufen wird. Darüber hinaus ist es möglich zu haben ThreadPool Hunger, aber Ihre Kilometerleistung wird je nach Implementierung variieren. Im Inneren, SendMailAsync verwendet a ThreadPool Thread, um die Aufgabe auszuführen. Ich würde mir nicht Sorgen machen, wenn es nur eine E -Mail hier und da wäre.

Keine getrennten Instanzen werden kein Problem sein. Wenn viele Benutzer gleichzeitig Anfragen senden, sind sie jeweils unterschiedliche Instanzen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top