当前位置: 首页 > 图文教程 > 网络编程 > ASP.NET > 如何保证web app中的Send Email线程稳定性

ASP.NET
细细品味ASP.NET(一)
细细品味ASP.NET(二)
细细品味ASP.NET(三)
细细品味ASP.NET(四)
细细品味ASP.NET(五)
用asp.net和xml做的新闻更新系统(1)
用asp.net和xml做的新闻更新系统(2)
用asp.net和xml做的新闻更新系统(3)
十天学会ASP.net(1)
十天学会ASP.net(2)
十天学会ASP.net(3)
十天学会ASP.net(4)
十天学会ASP.net(5)
十天学会ASP.net(6)
十天学会ASP.net(7)
十天学会ASP.net(8)
十天学会ASP.net(9)
十天学会ASP.net(10)
ASP.NET创建XML Web服务全接触(1)
ASP.NET创建XML Web服务全接触(2)

ASP.NET 中的 如何保证web app中的Send Email线程稳定性


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-08-14   浏览: 154 ::
收藏到网摘: n/a

在asp.netforums2或者cs系统中,每过几分种会发送一次email,但是如果在执行时,数据库服务器重启。

会导致SendEmail线程死掉。

参考代码:
privatevoidScheduledWorkCallbackEmailInterval(objectsender)
{
try{
//suspendthetimerwhileweprocessemails
emailTimer.Change(System.Threading.Timeout.Infinite,EmailInterval);

//Sendemails
//
Emails.SendQueuedEmails((HttpContext)sender);


//Updateanonymoususers
//
Users.UpdateAnonymousUsers((HttpContext)sender);

}
catch(Exceptione){
ForumExceptionfe=newForumException(ForumExceptionType.EmailUnableToSend,"ScheduledWorkerThreadfailed.",e);
fe.Log();
}
finally{
emailTimer.Change(EmailInterval,EmailInterval);
}
}

事实上,代码:emailTimer.Change(System.Threading.Timeout.Infinite,EmailInterval);

不够强壮,理论上讲,如果在执行中出错,会执行:

finally{
emailTimer.Change(EmailInterval,EmailInterval);
}


但,事实上,如果是数据库服务器重启,则可以让timer线程永远死掉。

手工解决方法:重启这个webapp

或者改写代码:emailTimer.Change(System.Threading.Timeout.Infinite,EmailInterval);

为:emailTimer.Change(EmailInterval*2,EmailInterval);

可以解决


其他参考:

msdn:

System.Theading.Timer.ChangeAPI: