.net - .NET 3.5 中的 SmtpClient SendAsync

标签 .net multithreading asynchronous smtpclient

这个问题是关于 .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/

相关文章:

java - 阻塞线程的调用方法

objective-c - (异步)NSURLConnection : what's going on underneath?

c# - 将 Task<A> 异步转换为 Task<B>

.net - 通过 VSTO 解决方案资源管理器文件夹结构与代码路径的 Excel 功能区

c# - 4个接口(interface)的接口(interface)?

c++ - 循环范围拆分中的变量预评估

java - 为什么我们必须使用相同的 volatile 字段来使用 volatile 关键字建立 happens-before 关系?

c# - 检查属性是否为 null LINQ

c# - 如何将 IQueryable<string> 转换为字符串?

javascript - 永远不会调用异步函数的回调