由于它是一次性的,我对如何管理SmtpClient感到困惑,尤其是当我使用SendAsync进行 call 时。大概在SendAsync完成之前,我不应该调用Dispose。但是我应该调用它吗(例如,使用“使用”)。该方案是WCF服务,该服务会在拨打电话时定期发送电子邮件。大多数计算速度很快,但是发送电子邮件可能需要一秒钟左右的时间,因此Async是更可取的。
每次发送邮件时都应该创建一个新的SmtpClient吗?我应该为整个WCF创建一个吗?帮助!
更新如果有所作为,则始终为用户定制每封电子邮件。 WCF托管在Azure上,Gmail用作邮件程序。
最佳答案
注意:.NET 4.5 SmtpClient实现async awaitable
方法SendMailAsync
。对于较低版本,请按照以下说明使用SendAsync
。
您应该始终尽早处置IDisposable
实例。对于异步调用,这是在消息发送后的回调中。
var message = new MailMessage("from", "to", "subject", "body"))
var client = new SmtpClient("host");
client.SendCompleted += (s, e) => {
client.Dispose();
message.Dispose();
};
client.SendAsync(message, null);
令人讨厌的是
SendAsync
不接受回调。关于c# - 在.NET 4.0下使用SmtpClient,SendAsync和Dispose的最佳实践是什么,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7276375/