Разумно ли использовать SMTP.SendAsync в asp.net - PullRequest
1 голос
/ 03 декабря 2011

Я пишу код, который отправляет 2 кода на 2 разных письма (чтобы убедиться, что владельцем обоих писем является один и тот же человек).И я получил ошибку:System.InvalidOperationException: асинхронный вызов уже выполняется.Он должен быть завершен или отменен, прежде чем вы сможете вызвать этот метод.Что ж, я могу просто избежать этой ошибки при отправке второго электронного письма после завершения первого, но вопрос заключается в том, что если так много пользователей одновременно запросят отправку электронного письма (забытый пароль, изменение адреса электронной почты, регистрация, ...)это вызывает проблему?или я получу эту ошибку только тогда, когда они будут повторяться на одной и той же странице?

Заранее спасибо,Ashkan

Ответы [ 3 ]

7 голосов
/ 03 декабря 2011

Цель метода SendAsync - не блокировать вызывающий поток;однако необходимо дождаться завершения метода SendAsync, прежде чем отправлять новое электронное письмо на тот же экземпляр SmtpClient.Другими словами, создайте 2 экземпляра, по одному для каждого электронного письма, и отправьте их оба асинхронно, если хотите.

Из MSDN:

После вызова SendAsync,необходимо дождаться завершения передачи электронной почты, прежде чем пытаться отправить другое сообщение электронной почты с помощью Send или SendAsync.

0 голосов
/ 04 декабря 2011

Нет Отдельные экземпляры не будут проблемой.если многие пользователи отправляют запросы одновременно, у каждого из них будут разные экземпляры.

0 голосов
/ 03 декабря 2011

Как указал Икар, вам нужно дождаться окончания SendAsync, прежде чем вызывать его в том же экземпляре.В дополнение к этому возможно голодание на ThreadPool, но ваш пробег будет варьироваться в зависимости от вашей реализации.Внутренне SendMailAsync использует поток ThreadPool для выполнения задачи.Я не был бы обеспокоен, если это - просто электронная почта здесь и там все же.

...