我在MSDN文档中读到了这个,这似乎意味着我仍然需要在我的代码中调用SendAsync方法后等待,该方法粘贴在下面。这是对的吗?如果是,那么我也可以使用Send而不是SendAsync的同步方法。我的目标是转到循环中的下一封电子邮件并发送它而不等待发送上一封邮件,这样我就可以比使用Send方法更快地处理emailMessages集合。但这似乎不正确。
调用SendAsync后,您必须等待电子邮件传输完成,然后再尝试使用Send或SendAsync发送其他电子邮件。
我正在使用C#和.Net framework 4.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);
}
答案 0 :(得分:2)
async
方法优于非异步替代方法的优点是您不需要阻止当前线程。这在您不希望阻止UI线程的UI环境中特别有用,并且还可以防止阻塞线程池线程。
如果你只想对结果进行阻塞等待,那么它就没有优于非异步替代方案的优势。