[解決済み] .NET 4.0でのSmtpClient、SendAsync、Disposeの使用に関するベストプラクティスを教えてください。
2022-08-14 05:52:58
質問
SmtpClient が使い捨てになったので、特に SendAsync を使用して呼び出しを行う場合、SmtpClient をどのように管理するかについて少し困惑しています。 おそらく、SendAsync が完了するまで Dispose を呼び出さないようにすべきです。 しかし、私はそれを呼び出す必要があります(例えば、"using"を使用します)。 シナリオは、呼び出しが行われたときに定期的に電子メールを送信するWCFサービスです。 ほとんどの計算は高速ですが、電子メールの送信には1秒ほどかかることがあるため、Asyncが望ましいと思います。
メールを送信するたびに新しい SmtpClient を作成する必要がありますか。 WCF全体に対して1つ作成する必要がありますか? 助けてください!
更新する 因みに、各メールは常にユーザーに合わせてカスタマイズされています。 WCFはAzureでホストされ、メーラーとしてGmailが使用されています。
どのように解決するのですか?
注意: .NET 4.5 SmtpClient は、以下のものを実装しています。
async awaitable
メソッド
SendMailAsync
. 下位バージョンでは
SendAsync
を使います。
を常に破棄する必要があります。
IDisposable
インスタンスはできるだけ早く破棄する必要があります。非同期呼び出しの場合、これはメッセージが送信された後のコールバックで行われます。
var message = new MailMessage("from", "to", "subject", "body"))
var client = new SmtpClient("host");
client.SendCompleted += (s, e) => {
client.Dispose();
message.Dispose();
};
client.SendAsync(message, null);
はちょっと困る。
SendAsync
がコールバックを受け付けないのはちょっと困る。
関連
-
[解決済み] 'SubSonic.Schema .DatabaseColumn' 型のオブジェクトをシリアライズする際に、循環参照が検出されました。
-
[解決済み】リソースの読み込みに失敗した:ステータス500(内部サーバーエラー)のサーバーの応答)
-
[解決済み】C# - パスに不正な文字がある場合
-
[解決済み】名前 'ViewBag' が現在のコンテキストに存在しない - Visual Studio 2015
-
[解決済み] C#の正しいバージョン番号を教えてください。
-
[解決済み] .NET 4.0 プロジェクトで .NET 2.0 混合モード アセンブリを参照するために必要な「追加設定」は何ですか?
-
[解決済み] Microsoft .NET 4.0 full FrameworkとClient Profileの違いについて
-
[解決済み】いくつかの良い.NETプロファイラーとは何ですか?
-
[解決済み】.NETの例外をキャッチして再スローするためのベストプラクティス
-
[解決済み] .NETでSmtpClientオブジェクトにユーザー名とパスワードを設定する方法は?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】GDI+、JPEG画像をMemoryStreamに変換する際にジェネリックエラーが発生しました。
-
[解決済み】スクリプトクラスが見つからないので、スクリプトコンポーネントを追加できない?
-
[解決済み】WebForms UnobtrusiveValidationModeは、jqueryのScriptResourceMappingを必要とする
-
[解決済み】文字列が有効な DateTime " format dd/MM/yyyy " として認識されなかった。
-
[解決済み】パディングが無効で、削除できない?
-
[解決済み】プロジェクトビルド時のエラー。エディタでスクリプトにコンパイルエラーがあるため、Playerのビルドにエラーが発生する
-
[解決済み】クロススレッド操作が有効でない。作成されたスレッド以外のスレッドからアクセスされたコントロール
-
[解決済み】2年前のMSDateを把握する【クローズド
-
[解決済み】IntPtrとは一体何なのか?
-
[解決済み】WebResource.axdとは何ですか?