gpt4 book ai didi

c# - 线程 Windows 服务 - SmtpClient 问题

转载 作者:行者123 更新时间:2023-11-30 21:16:34 24 4
gpt4 key购买 nike

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

SmtpClient.Send() 方法时不时地抛出此错误消息:

An asynchronous call is already in progress. It must be completed or canceled before you can call this method.

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

除了锁定那部分代码,我知道如何解决这个问题。这会破坏线程的目的。

提前致谢

最佳答案

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

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

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

关于c# - 线程 Windows 服务 - SmtpClient 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5144023/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com