質問

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

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

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

前もって感謝します、
アシュカン

役に立ちましたか?

解決

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

MSDNから:

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

他のヒント

イカロスが指摘したように、あなたは SendAsync 同じインスタンスで呼び出す前に終了します。それに加えて、 ThreadPool 飢vですが、走行距離は実装によって異なります。初めの、 SendMailAsync aを使用します ThreadPool タスクを実行するスレッド。それがあちこちに単なるメールであるかどうかは心配しません。

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top