【发布时间】:2012-01-11 16:08:54
【问题描述】:
这个问题是关于 .NET 3.5 中的 SmtpClient 的。我知道 .NET 4 中的 dispose 更改,但目前无法迁移。
我想知道如果您使用 sendasync 并且 smtpclient 超出范围,那么 smtpclient 会发生什么。示例:
public void SendSomething(){
SmtpClient smtp = new SmtpClient(...);
smtp.SendCompleted += SendCompletedCallback;
smtp.SendAsync(...);
}
private void SendCompletedCallback(object sender, AsyncCompletedEventArgs e){
...
}
如果你发送这样的东西会发生什么,对象超出了方法的范围,smtpclient 有点慢,现在才开始实际发送:这有什么问题吗?或者 smtpclient 是否保护自己免受垃圾收集等?
根据 msdn 文档,您不能在另一个 sendasync 尚未完成时执行 sendasync。但是,如果您创建两个 smtpclients 并同时执行 sendasync(例如,两个线程同时调用 SendSomething() 方法)会发生什么。它可以处理这个问题还是会产生问题?
另一个问题: 目前在 .NET 3.5 中,smtp 客户端在完成后不会发送退出命令。这在 .NET 4 中已通过 dispose 修复。但是这个错误有多严重:如果不发送退出命令,它是否会导致 smtp 服务器出现问题?或者这是他们应该能够处理的事情?
【问题讨论】:
标签: .net multithreading asynchronous smtpclient