當在我的網站用戶註冊,我不明白爲什麼我需要讓他「等待」 SMTP去通過,以便他得到一封激活郵件。有道異步發送ASP.NET中的電子郵件...(我是這樣做對嗎?)
我決定,我希望異步啓動這個代碼,它已經冒險。
讓我們來想象我有一個方法,如:
private void SendTheMail() { // Stuff }
我的第一個,但..穿線。我這樣做:
Emailer mailer = new Emailer();
Thread emailThread = new Thread(() => mailer.SendTheMail());
emailThread.Start();
這個工程...直到我決定測試它的錯誤處理能力。我故意打破了我的web.config中的SMTP服務器地址並嘗試了它。可怕的結果是,IIS基本上BARFED在w3wp.exe上有一個未處理的異常錯誤(這是一個Windows錯誤!有多極端......)ELMAH(我的錯誤記錄器)沒有捕獲它並且IIS重新啓動,所以網站上的任何人都有他們的會話被刪除。完全不可接受的結果!
我的下一個想法,就是做異步委託一些研究。這似乎更好,因爲異常正在異步委託內處理(不像上面的線程示例)。但是,我擔心如果我做錯了,或者我正在造成內存泄漏。
下面是我在做什麼:
Emailer mailer = new Emailer();
AsyncMethodCaller caller = new AsyncMethodCaller(mailer.SendMailInSeperateThread);
caller.BeginInvoke(message, email.EmailId, null, null);
// Never EndInvoke...
我這樣做對嗎?
所以纔得到這個權利:在SendTheMail也不例外處理任何? – rene 2012-01-05 18:12:50
我剛開始這樣做。在內部,我捕獲異常並像這樣調用elmah記錄器:Elmah.ErrorLog.GetDefault(null).Log(new Error(e));這就是訣竅。 – 2012-01-05 21:30:05