如果我有2个SmtpClient对象并且我同时调用SendAsync()方法,这两个发送请求是在一个线程中顺序处理还是在多个线程中同时处理? SendAsync()方法的实现是什么?
如果在Web服务器线程池的新线程中处理每个SendAsync()方法调用,这可能会导致Web服务器线程池中的可用线程减少,从而降低整体性能(如果命中线程池最大限制) 。
我正在搜索MSDN文档,但是我没有找到解释异步方法如何处理的解释。
答案 0 :(得分:0)
很有可能在封面下,呼叫保持异步,依赖于来自较低层(即Winsock,在异步模式中使用)的回调来驱动继续处理。我希望一个线程能够处理多个异步发送调用,而不必等待早期的调用完成。出于吞吐量和资源使用的原因,以同步方式处理从客户端发出的异步调用或者在通信栈中进一步处理每次调用的线程,这是没有意义的。
对于只有2个调用,它们很可能会被单个线程“伪并发”(每个轮流处理来处理来自WinSock的异步通知)处理它们。
答案 1 :(得分:0)
对于任何一个SmtpClient对象,您一次只能发送一条消息...... MSDN Documentation说:
“在调用SendAsync之后,您必须等待电子邮件传输完成后再尝试使用Send或SendAsync发送另一封电子邮件。”