What it says on the tin.
views:
527answers:
3According to MSDN:
After calling SendAsync, you must wait for the e-mail transmission to complete before attempting to send another e-mail message using Send or SendAsync.
So you could reuse the same instance but you must wait for the first mail to be sent.
According to the MSDN page on SmtpClient, the only purpose for SendAsync is to allow your current thread to continue processing instead of waiting for the transmission to process. The purpose of SendAsync isn't to allow you to send multiple messages at once, it's to allow you to continue processing while it sends the message. SendAsync and Send are both using the same pipeline, SendAsync just allows you to do other things while the message is sent.
To address the underlying problem, you want to send (a lot of) emails as fast as possible. That means using a limited number of threads, and that number should be configurable. The optimum depends on hardware and bandwidth etc.
So, create N threads (you can use ThreadPool or BackgroundWorker), and let each thread process mails form a Queue, using SmtpClient.Send(), not SendAsync(). Feeding and using the queue is a standard Producer/Consumer problem, Fx4 has a set of nice classes for that. For Fx3.x you will have to shop around.