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