.NET 3.5中的SmtpClient SendAsync

时间:2012-01-11 16:08:55

标签: .net multithreading asynchronous smtpclient

这个问题是关于.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客户端在完成后不会发送quit命令。这在使用dispose的.NET 4中得到修复。但是这个错误有多糟糕:如果没有发送退出命令,它是否会导致smtp服务器出现问题?或者这是他们应该能够处理的事情吗?

1 个答案:

答案 0 :(得分:2)

只要异步操作正在执行,SmtpClient就会被方法框架或回调代理人参与。
别担心。

多个SmtpClient不会互相干扰。