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