1

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

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

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

在此先感谢,
阿什坎

4

3 回答 3

7

SendAsync 方法的目的不是阻塞调用线程;但是,您必须等待 SendAsync 方法完成,然后才能在同一 SmtpClient 实例上发送新电子邮件。换句话说,为每封电子邮件创建 2 个实例,并根据需要异步发送它们。

来自 MSDN:

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

于 2011-12-03T17:52:21.220 回答
0

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

于 2011-12-03T18:10:27.067 回答
0

没有单独的实例不会有问题。如果许多用户同时发送请求,他们每个人将是不同的实例。

于 2011-12-03T21:48:19.130 回答