Sử dụng SMTP để send email có đôi khi sẽ chậm nếu như chúng ta send email số lượng lớn (bulk email), may thay SMTP Client cũng support chúng ta send email bất đồng bộ (synchronously), giúp chúng ta cải thiện tốc độ của ứng dụng.
Với việc send email bất đồng bộ, tức là Email sẽ được send SMTP server sử dụng các Threads khác nhau và không cần đợi cho đến khi email có được send hay chưa.
Sử dụng phương thức SmtpClient.SendAsync() thay vì SmtpClient.Send(), hai phương thức này cũng tương đương nhau, nhưng phương thức SmtpClient.SendAsync chỉ thêm 1 tham số User Token, nó là 1 unique object, được truyền vào khi send email.
sc.SendCompleted += new SendCompletedEventHandler(sc_SendCompleted);
object userState = mail;
sc.SendAsync(mail, userState);
Bởi vì email được send với các Thread khác nhau nên quá trình hoàn tất việc send mail cũng không được tiến hành ngay lập tức, chính vì thề lớp SmtpClient cung cấp 1 event Send Completed email như bên trên, trong hàm này chúng ta sẽ log lại những exception, hoặc tiếp tục send khi email bị Cancelled.
static void sc_SendCompleted(object sender, AsyncCompletedEventArgs e){
if (e.Error != null)
{
log.Error(e.Error);
}
}
Chúc thành công
Không có nhận xét nào:
Đăng nhận xét