1

2 つのコードを 2 つの異なるメールに送信するコードを書いています (両方のメールの所有者が同じ人物であることを確認するため)。そして、エラーが発生しました:

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

最初のメールの送信が完了した後に 2 番目のメールを送信するこのエラーを簡単に回避できますが、問題は、非常に多くのユーザーが同時にメールの送信を要求した場合 (パスワードを忘れた、メールの変更、登録など)、それは問題を引き起こしますか?または、同じページで繰り返し実行された場合にのみこのエラーが発生しますか?

前もってありがとう、
アシュカン

4

3 に答える 3

7

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

MSDN から:

SendAsync を呼び出した後、Send または SendAsync を使用して別の電子メール メッセージを送信する前に、電子メールの送信が完了するまで待つ必要があります。

于 2011-12-03T17:52:21.220 に答える
0

Icarusが指摘したSendAsyncように、同じインスタンスで呼び出す前に、が終了するのを待つ必要があります。それに加えて、ThreadPool飢餓状態になる可能性がありますが、マイレージは実装によって異なります。内部的にSendMailAsyncは、ThreadPoolスレッドを使用してタスクを実行します。あちこちのメールだけでも気になりません。

于 2011-12-03T18:10:27.067 に答える
0

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

于 2011-12-03T21:48:19.130 に答える