webdn
 
  首页     免费截图     VIP会员区     广告Banner     技术文档     网站模板  
网站截图,网站每日新 !
虚拟主机
网页模板

首页 >> WebDN 技术文档 >> 网络编程 >> ASP.net 技术资料 >> 保证web app中的Send Email线程稳定性

 

保证web app中的Send Email线程稳定性

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

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

会导致Send Email 线程死掉。

参考代码:
private void ScheduledWorkCallbackEmailInterval (object sender)
{
try {
// suspend the timer while we process emails
emailTimer.Change( System.Threading.Timeout.Infinite, EmailInterval );

// Send emails
//
Emails.SendQueuedEmails( (HttpContext) sender);


// Update anonymous users
//
Users.UpdateAnonymousUsers( (HttpContext) sender);

}
catch( Exception e ) {
ForumException fe = new ForumException( ForumExceptionType.EmailUnableToSend, "Scheduled Worker Thread failed.", e );
fe.Log();
}
finally {
emailTimer.Change( EmailInterval, EmailInterval );
}
}

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

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

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


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

手工解决方法: 重启这个web app

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

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

可以解决


其他参考:

msdn:

System.Theading.Timer.Change API:



电话咨询:010-60520722 QQ咨询:3792656   |   583696287   |   66733350 关于WebDN  |  站点地图  |  联系我们  |  支付方式  |  友情链接
© 2004-2008 WebDN.com 版权所有. 沪ICP备05040479号