Is it wise to use SMTP.SendAsync in asp.net

半城伤御伤魂 提交于 2019-12-24 12:51:08

问题


I'm writing a code that sends 2 codes to 2 different emails (to check that owner of both emails are the same person). And I got the error:

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

Well I can simply avoid this error sending the second email after the sending of the first one completes, but the question is that if so many users at the same time request email sending (forgotten password, email change, registration, ...) would it cause problem? or I will get this error only when they are executed repeatedly at the same page?

Thanks in advance,
Ashkan


回答1:


The purpose of the SendAsync method is not to block the calling thread; however, you must wait for the SendAsync method to finish before you can send a new email on the same SmtpClient instance. In other words, create 2 instances, one for each email, and send them both asynchronously if you want.

From MSDN:

After calling SendAsync, you must wait for the e-mail transmission to complete before attempting to send another e-mail message using Send or SendAsync.




回答2:


As Icarus pointed out, you have to wait for the SendAsync to finish before calling it on the same instance. In addition to that, it is possible to have ThreadPool starvation, but your mileage will vary based on your implementation. Internally, SendMailAsync uses a ThreadPool thread to perform the task. I wouldn't be concerned if it's just an email here and there though.




回答3:


No Separate instances won't be a problem. if many users send requests at the same time they each will be different instances.



来源:https://stackoverflow.com/questions/8369614/is-it-wise-to-use-smtp-sendasync-in-asp-net

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!