在asp.net中使用SMTP.SendAsync是明智的吗?

时间:2011-12-03 17:44:52

标签: c# asp.net smtp sendasync

我正在编写一个代码,将2个代码发送到2个不同的电子邮件(以检查这两封电子邮件的所有者是否是同一个人)。我得到了错误:

System.InvalidOperationException:异步调用已在进行中。必须先完成或取消它才能调用此方法。

我可以简单地避免在发送第一封电子邮件完成后发送第二封电子邮件时出现此错误,但问题是如果有这么多用户同时请求发送电子邮件(忘记密码,电子邮件更改) ,注册,...)会引起问题吗?或者只有当它们在同一页面上重复执行时才会出现此错误?

提前致谢,
Ashkan

3 个答案:

答案 0 :(得分:7)

SendAsync方法的目的不是阻止调用线程;但是,必须等待SendAsync方法完成才能在同一个SmtpClient实例上发送新电子邮件。换句话说,创建2个实例,每个电子邮件一个,如果需要,可以异步发送它们。

From MSDN:

  

调用SendAsync后,您必须等待电子邮件传输到   在尝试使用“发送”发送另一封电子邮件之前完成   或SendAsync。

答案 1 :(得分:0)

正如Icarus指出的那样,你必须等待SendAsync完成才能在同一个实例上调用它。除此之外,可能会有ThreadPool饥饿,但您的里程将根据您的实施情况而有所不同。在内部,SendMailAsync使用ThreadPool线程来执行任务。如果它只是在这里和那里发送电子邮件,我不会担心。

答案 2 :(得分:0)

否单独的实例不会成为问题。如果许多用户同时发送请求,则每个用户都将是不同的实例。