0

私はMSDNのドキュメントでこれを読みました。これは、以下に貼り付けたコードでSendAsyncメソッドを呼び出した後も待つ必要があることを示唆しているようです。これは正しいですか? もしそうなら、SendAsyncではなくSendの同期メソッドを使用したほうがよいでしょう。私の目標は、ループ内の次の電子メールメッセージに移動し、前のメッセージが送信されるのを待たずに送信することでした。これにより、Sendメソッドを使用する場合に比べてemailMessagesコレクションをより迅速に処理できるようになります。しかし、それは真実ではないようです。

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

C#と.NetFramework4.5を使用しています。私のコードでは、SendAsyncメソッドを使用して、以下のコードのようにループ内から複数の電子メールを送信しようとしています。

List<EmailMessage> emailMessages = DAL.GetEmailsToBeSent();
SmtpClient client = new SmtpClient(); 

foreach(EmailMessage emailMessage in emailMessages)
{
  //create a message object from emailMessage object and then send it asynchronously
  client.SendAsync(message);
 //client.Send(message);
}
4

1 に答える 1

2

非非同期の代替方法に対するこの方法の利点はasync、現在のスレッドをブロックする必要がないことです。これは、UIスレッドをブロックしたくないUI環境で特に役立ちます。また、スレッドプールスレッドをブロックする必要がなくなります。

結果をブロック待機するだけの場合は、非同期以外の方法に勝る利点はありません。

于 2012-12-08T18:55:15.893 に答える