当前位置:  开发笔记 > 编程语言 > 正文

为什么只能调用一次SmtpClient.SendAsync?

如何解决《为什么只能调用一次SmtpClient.SendAsync?》经验,为你挑选了2个好方法。

我正在尝试使用SmtpClient在.NET中编写通知服务(用于完全合法的非垃圾邮件目的).最初我只是通过每个消息循环并发送它,但这很慢,我想提高速度.所以,我切换到使用'SendAsync',但现在第二次调用时出现以下错误:

An asynchronous call is already in progress. 

我读到这意味着MS瘫痪System.Net.Mail以防止群发邮件.它是否正确?如果是这样,有没有更好的方法在.NET中执行此操作,并且仍然能够记录每封电子邮件的结果(这对我们的客户来说很重要).如果没有,为什么SendAsync只能被调用一次?



1> Darin Dimitr..:

根据文件:

调用SendAsync后,必须等待电子邮件传输完成后再尝试使用Send或SendAsync发送另一封电子邮件.

因此,要同时发送多个邮件,您需要多个SmtpClient实例.


@ItayLevin我没有看到尝试重用SmtpClient实例的需要.为什么不直接为每个电子邮件发送尝试分配每个实例,正如Darin专业解​​释的那样.

2> kntcnrg..:

您可以使用以下内容:

ThreadPool.QueueUserWorkItem(state => client.Send(msg));

这应该允许您的消息排队并在线程可用时发送.


从同一个`SmtpClient`实例发送时,此实现仍可能产生`System.InvalidOperationException`.
推荐阅读
我我檬檬我我186
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有