由于它是一次性的,我对如何管理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/

10-12 14:55