我面临着一个普遍的问题,我无法找到一个很好的例子来为自己尝试。谷歌不是一个帮助。
想象一下这样的结构:
MailMessage mail = new MailMessage(sender, receiver);
using(SmtpClient client = new SmtpClient())
{
client.Host ...
client.Port ...
mail.subject ...
mail.body ...
client.SendAsync(mail);
}
如果服务器很慢并且需要一段时间来接受邮件,该怎么办?操作完成之前是否可能放置SmtpClient
?它会以任何方式被卷入或破坏吗?
这是否有一般性答案?这里的服务器速度太快,不知道如何进行试用。
如果考虑取消BackgroundWorker
,它总是完成当前的操作。可以在这里相同,也可以不是......
答案 0 :(得分:12)
您可以使用返回SendMailAsync
的较新Task
方法,并等待该任务:
MailMessage mail = new MailMessage(sender, receiver);
using(SmtpClient client = new SmtpClient())
{
client.Host ...
client.Port ...
mail.subject ...
mail.body ...
await client.SendMailAsync(mail);
}
这将确保在SendMailAsync
完成之前不会处理客户端。
(当然,这意味着你的方法现在也必须是异步的)