2010-10-05 155 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的電子郵件。「