2010-10-05 5 views
0

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

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

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

ответ

0

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

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

0

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

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

Смежные вопросы