2011-12-03 20 views
1

2つのコードを2つの異なる電子メールに送信するコードを作成しています(両方の電子メールの所有者が同じ人であることを確認する)。そして、私はエラーを受け取りました:

System.InvalidOperationException:非同期呼び出しはすでに進行中です。このメソッドを呼び出すには、完了またはキャンセルする必要があります。

まあ、最初の送信完了後に2番目のメールを送信するのを避けることはできますが、多くのユーザーが同時にメールを送信したい場合は(パスワードを忘れた、メールの変更、登録、... )それは問題を引き起こすでしょうか?または、同じページで繰り返し実行される場合にのみ、このエラーが発生します。事前にasp.netでSMTP.SendAsyncを使用することをお勧めします。

おかげで、
Ashkan

答えて

7

SendAsyncメソッドの目的は、呼び出し元のスレッドをブロックすることはありません。ただし、同じSmtpClientインスタンスで新しい電子メールを送信する前に、SendAsyncメソッドが完了するのを待つ必要があります。つまり、電子メールごとに1つずつ2つのインスタンスを作成し、必要に応じて両方を非同期で送信します。

From MSDN:

After calling SendAsync, you must wait for the e-mail transmission to complete before attempting to send another e-mail message using Send or SendAsync.

0

イカルスが指摘したように、あなたはSendAsyncが同じインスタンス上でそれを呼び出す前に終了するのを待たなければなりません。それに加えて、ThreadPoolの飢餓状態がある可能性がありますが、あなたの走行距離は実装に応じて異なります。内部的には、SendMailAsyncThreadPoolスレッドを使用してタスクを実行します。私はそれがちょうどここにそしてそこに電子メールであれば私は心配しないでしょう。

0

いいえ別々のインスタンスは問題になりません。多くのユーザーが同時にリクエストを送信すると、それぞれ異なるインスタンスになります。

関連する問題