SmtpClient.SendMailAsync
32 個の CPU を搭載した Windows Server 2008 64 ビット Enterprise で .NET 4.5 のメソッドを使用して、大量の電子メールを送信しようとしています。
デバッグ中に、同時に実行されているリクエストは 2 つだけであることがわかりました。私がサーバーOSを使用していることを考えると、それは驚くべきことです。
簡単なテストケースを次に示します。
static void Main(string[] args)
{
var sw = Stopwatch.StartNew();
var t1 = SendEmail();
var t2 = SendEmail();
var t3 = SendEmail();
var t4 = SendEmail();
var t5 = SendEmail();
var t6 = SendEmail();
var t7 = SendEmail();
var t8 = SendEmail();
Task.WaitAll(t1, t2, t3, t4, t5, t6, t7, t8);
Console.WriteLine(sw.Elapsed);
}
static async Task SendEmail()
{
using (var smtp = new SmtpClient())
{
Console.WriteLine("Starting [{0}]", DateTime.UtcNow.ToString("o"));
await smtp.SendMailAsync("...", "...", "Test", "Testing...");
Console.WriteLine("Done [{0}]", DateTime.UtcNow.ToString("o"));
}
}
そして結果。すぐに始まりますが、2 つのバッチで終了します (時間を参照してください)。また、Process Explorer で開いている接続を確認すると、同じ動作が示されます。
Starting [2013-03-07T14:27:17.4643296Z]
Starting [2013-03-07T14:27:17.4783382Z]
Starting [2013-03-07T14:27:17.4783382Z]
Starting [2013-03-07T14:27:17.4793387Z]
Starting [2013-03-07T14:27:17.4793387Z]
Starting [2013-03-07T14:27:17.4793387Z]
Starting [2013-03-07T14:27:17.4793387Z]
Starting [2013-03-07T14:27:17.4793387Z]
Done [2013-03-07T14:27:19.2070974Z]
Done [2013-03-07T14:27:19.2070974Z]
Done [2013-03-07T14:27:19.7541596Z]
Done [2013-03-07T14:27:19.7602234Z]
Done [2013-03-07T14:27:20.3880420Z]
Done [2013-03-07T14:27:20.3906050Z]
Done [2013-03-07T14:27:20.9254624Z]
Done [2013-03-07T14:27:20.9324577Z]
00:00:03.7476343
より多くのリクエストを実際にスピンアップする方法はありますか?