2010-10-05 111 views
0

如果我有2个SmtpClient对象,并且我同时调用SendAsync()方法,这两个发送请求是在一个线程中按顺序处理还是同时在多个处理中处理? SendAsync()方法的实现是什么?SmtpClient.SendAsync是否降低或提高性能?

如果每个SendAsync()方法调用都是在来自Web服务器线程池的新线程中处理的,则可能导致Web服务器线程池中的可用线程数减少,从而降低整体性能(如果线程池最大限制被触发)。

我已经搜索MSDN文档,但是我没有找到解释如何处理异步方法。

回答

0

很有可能在封面之下,调用仍然是异步的,依靠来自较低层(即Winsock,用于异步模式)的回调来驱动继续处理。我期望一个线程能够处理多个异步发送调用,而无需等待较早的线程完成。出于吞吐量和资源使用的原因,以同步方式或通信线程进一步向通信堆栈下方处理从客户端发出的异步调用是没有意义的。

对于只有2个调用,它们很可能会被一个线程“伪同时”处理(每个处理器轮流处理来自WinSock的异步通知)。

0

对于任何一个SmtpClient对象,你只能一次发送一个消息... MSDN Documentation说:

“调用SendAsync后,必须等待E-mail发送到尝试发送另一个前完成使用Send或SendAsync的电子邮件。“