特色栏目

ASP源码

PHP源码

.NET源码

JSP源码

游戏频道
专题合集
关闭菜单
首页> ASP.NET教程> 如何保证web app中的Send Email线程稳定性

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

时间:2009-06-30 15:36:27 作者:互联网

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

会导致Send Email 线程死掉。

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

    // Send emails
    //
    Em***s.SendQueuedEmails( (HttpContext) sender);


    // Update anonymous users
    //
    Us***.UpdateAnonymousUsers( (HttpContext) sender);

   }
   catch( Exception e ) {
    ForumException fe = new ForumException( Fo***ExceptionType.EmailUnableToSend, "Scheduled Worker Thread failed.", e );
    fe.Log();
   }
   finally {
    em***Timer.Change( EmailInterval, EmailInterval );
   }
        }

 

事实上,代码:em***Timer.Change( Sy***m.Threading.Timeout.Infinite, EmailInterval );

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

finally {
    em***Timer.Change( EmailInterval, EmailInterval );
   }


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

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

或者改写代码:em***Timer.Change( Sy***m.Threading.Timeout.Infinite, EmailInterval );

为:em***Timer.Change( EmailInterval  * 2, EmailInterval ); 

可以解决


其他参考:

msdn:

Sy***m.Theading.Timer.Change API:

相关文章 最新文章

相关应用

热门文章

猜你喜欢

返回顶部