这个问题是关于 .NET 3.5 中的 SmtpClient 的。我知道 .NET 4 中的处置更改,但目前无法进行迁移。
我想知道如果您使用 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 中已通过处置修复。但是这个错误有多糟糕:如果不发送退出命令,它会导致 smtp 服务器出现问题吗?或者这是他们应该能够处理的事情?
最佳答案
只要异步操作正在执行,SmtpClient
就会被方法框架或回调委托(delegate)引用。
别担心。
多个SmtpClient
不会互相干扰。
关于.net - .NET 3.5 中的 SmtpClient SendAsync,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8822548/