SmtpClient.SendAsync уменьшить или увеличить производительность? - PullRequest
0 голосов
/ 05 октября 2010

Если у меня есть 2 объекта SmtpClient и я вызываю метод SendAsync () для обоих одновременно, будут ли эти 2 запроса на отправку обрабатываться последовательно в одном потоке или одновременно в более чем одном? Какова реализация метода SendAsync ()?

Если каждый вызов метода SendAsync () обрабатывается в новом потоке из пула потоков веб-сервера, это может привести к уменьшению свободных потоков в пуле потоков веб-сервера и, следовательно, к снижению общей производительности (если достигнут максимальный предел пула потоков) ,

У меня есть поиск в документации MSDN, но я не нашел объяснения, как обрабатываются асинхронные методы.

Ответы [ 2 ]

0 голосов
/ 17 апреля 2012

Для любого объекта SmtpClient вы можете отправлять только одно сообщение за раз ... Документация MSDN говорит:

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

0 голосов
/ 05 октября 2010

Весьма вероятно, что под прикрытием вызовы остаются асинхронными, полагаясь на обратные вызовы с нижнего уровня (т. Е. Winsock, используемый в асинхронном режиме) для управления продолжением обработки.Я ожидаю, что поток сможет обрабатывать несколько вызовов асинхронной отправки, не дожидаясь завершения предыдущих.По причинам пропускной способности и использования ресурсов не имело бы смысла обрабатывать асинхронные вызовы, поступающие от клиента, синхронизированным способом или потоком на вызов далее по стеку связи.

Только для 2 вызовов вполне вероятно, что они будут обрабатываться «псевдо-одновременно» (с обработчиком для каждого по очереди для обработки асинхронных уведомлений из WinSock) одним потоком.

...