【问题标题】:SmtpClient SendAsync in .NET 3.5.NET 3.5 中的 SmtpClient SendAsync
【发布时间】: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


    【解决方案1】:

    只要异步操作正在执行,SmtpClient 就会被方法框架或回调委托引用。
    不用担心。

    多个SmtpClients不会互相干扰。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-18
      • 1970-01-01
      • 1970-01-01
      • 2011-11-08
      • 1970-01-01
      • 1970-01-01
      • 2010-11-17
      • 1970-01-01
      相关资源
      最近更新 更多