2

テーブル内のメッセージのキューを読み取り、複数の受信者に電子メールとして送信するコンソール アプリを作成しました。典型的な使用シナリオは、2000通の電子メールを一度に送信することであり、それぞれが微妙に異なるメール本文(メールマージされた名前、アドレスなど)を持つ異なる電子メールアドレスに送信されます.

アプリは動作し、約 1 分半で 2000 通のメールを処理するようです。私が使用したアプローチは非常に単純です (簡潔にするために try..catch ブロックを取り出しました)。

using (var mailBot = new SmtpClient())
{
    foreach (var mail in dataContext.Mails
                                        .Where(item => !item.IsSent)
                                        .OrderBy(item => item.MailId)
                                        .ToList())
    {
        mailBot.Send(new MailMessage(mail.MailFrom, mail.MailTo, mail.Subject, mail.Message));
        mail.IsSent = true;
        dataContext.SaveChanges();
    }
}

さて、私の質問は、このアプリの操作を高速化するにはどうすればよいですか? このシリアル アプローチは、代わりに使用することで改善される可能性があるように感じますがSmtpClient.SendAsync()、作成されるスレッドの数を制御できないことを懸念しており、送信の結果をアプリで確認する必要があります。メールが正常に送信されたかどうかにフラグを付ける必要があります。また、受信 SMTP サーバーは一定数の同時要求しか処理できないと考えています。

マルチスレッド ソリューションがメール配信を高速化し、アプリを早期に終了させることができると考えるのは、自分を欺いているのでしょうか?

4

1 に答える 1

0

ここParallel.ForEachに示すように使用できます。

于 2015-02-24T09:53:59.840 に答える