当用户在我的网站上注册时,我不明白为什么我需要让他“等待”smtp通过,这样他才能收到激活电子邮件。
我决定异步启动这段代码,这是一次冒险。
假设我有一个方法,比如:
private void SendTheMail() { // Stuff }
我的第一次..是线程化。我这样做了:
Emailer mailer = new Emailer();
Thread emailThread = new Thread(() => mailer.SendTheMail());
emailThread.Start();
这行得通..。直到我决定测试它的错误处理能力。我故意破坏了我的web.config中的SMTP服务器地址,并尝试了它。可怕的结果是IIS基本上在w3wp.exe上出现了一个未处理的异常错误(这是一个windows错误!有多极端...)ELMAH (我的错误记录器)没有捕捉到它,IIS被重启,所以网站上的任何人都会删除他们的会话。完全不能接受的结果!
我的下一个想法是对异步委托做一些研究。这似乎工作得更好,因为异常是在异步委托中处理的(与上面的线程示例不同)。然而,我担心如果我做错了,或者我可能导致了内存泄漏。
这就是我要做的:
Emailer mailer = new Emailer();
AsyncMethodCaller caller = new AsyncMethodCaller(mailer.SendMailInSeperateThread);
caller.BeginInvoke(message, email.EmailId, null, null);
// Never EndInvoke...
我这样做对吗?
https://stackoverflow.com/questions/8747483
复制相似问题