您的位置:中国风网 > 电脑之家 > 主页制作

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

中国风网 2005-7-25 10:58:01



在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:

文章来源:互连网


推荐给您的朋友】    【发表评论】    【关闭窗口

 ■:相 关 文 章

 .NET环境下几种不同的邮件发送解决方案  (7月25日10:57:25)
 VC++.NET中使用GDI+创建特效字体  (7月19日13:9:20)
 VB.NET下获取硬盘信息的几种方法(续)  (3月31日17:16:57)
 VB.NET下获取硬盘信息的几种方法  (3月31日17:16:15)
 十天学会ASP.net之第十天   (3月25日17:47:41)
 十天学会ASP.net之第九天  (3月18日17:1:4)
 8千万元携手信产部 微软.NET联盟浮出水面  (3月13日13:45:48)
 十天学会ASP.net之第八天   (3月12日17:18:31)
 信产部建Windows/.NET实验室 微软投8千万  (3月11日13:15:0)
 中国.net提供海量机会 电子商务急起直追   (3月8日15:17:26)