2011-12-03 69 views
1

我正在寫一個代碼,將2個代碼發送到2個不同的電子郵件(以檢查兩個電子郵件的所有者是否是同一個人)。而我得到的錯誤:

System.InvalidOperationException:異步調用已在進行中。必須完成或取消之後才能調用此方法。

嗯,我可以簡單地避免發送第一封郵件後發送第二封電子郵件的錯誤,但問題是,如果很多用戶同時要求發送電子郵件(忘記密碼,電子郵件更改,註冊...... )會導致問題嗎?或者只有當它們在同一頁面上重複執行時,我纔會得到這個錯誤?在asp.net中使用SMTP.SendAsync是明智的

由於提前,
Ashkan

回答

7

的SendAsync方法的目的不是要阻止調用線程;但是,必須先等待SendAsync方法完成,然後才能在同一個SmtpClient實例上發送新電子郵件。換句話說,創建2個實例,每個電子郵件一個實例,並且如果需要,可以異步地發送它們。

From 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.

0

正如伊卡洛斯指出的那樣,你必須等待SendAsync來調用它在同一個實例之前完成。除此之外,飢餓可能會有ThreadPool,但是您的里程會根據您的實施情況而有所不同。在內部,SendMailAsync使用ThreadPool線程執行任務。儘管這只是一封郵件,但我不會擔心。

0

不個別情況下,也不會是一個問題。如果許多用戶同時發送請求,則每個用戶都將是不同的實例。

相關問題