线程Windows服务 - SmtpClient问题

时间:2011-02-28 15:35:49

标签: c# multithreading castle-windsor smtpclient

我们正在使用topshelf / windsor / masstransit编写一个线程服务来从MSMQ中接收消息,然后发送带有PDF附件的电子邮件。

SmtpClient.Send()方法每次都会抛出此错误消息:

  

异步调用已在进行中。必须先完成或取消,然后才能调用此方法。

我在Windsor中将SmtpClient设置为.LifeStyle.Transient,所以我的理解是每个线程都应该有自己的实例吗?

任何想法如何解决这个问题,而不是锁定代码的那一部分。哪种方式会破坏线程的目的。

提前致谢

1 个答案:

答案 0 :(得分:4)

Transient不应该只是为每个线程创建一个新实例,而是为每个请求创建一个新实例。

我试着确认你真的得到了一个新的SmtpClient实例 - 确保你没有把它粘在静态字段中,或者以某种方式以相同的引用结束。每次发送电子邮件时,您都可以尝试将结果从GetHashCode()吐出到控制台中,看看他们是否全部使用相同的对象。

如果做不到这一点,我唯一的建议是尝试将其删除为一个非常简单的示例 - 如果您在执行此操作时未发现问题,则可以在此处发布代码,但有人可能会提供帮助。