1

我对应用程序启动时运行的长时间运行任务有一些疑问。我创建了一个线程,当asp.net应用程序在Global.asax(Application_Start)中启动并且我在Global.asax(Application_End)中中止线程时运行

我想用 My Task 替换线程。我已经这样做了

线程实现

t = new Thread(new ThreadStart(() => 
               CheckConnection(emailTo, emailSubject, emailBody)));
t.Start();
_logger.Info("DB Monitor Thread Started ThreadID: " + t.ManagedThreadId);

任务实施

Task.Factory.StartNew(
   state =>
       {
           System.Web.HttpContext.Current = (HttpContext)state;
           CheckConnection(emailTo, emailSubject, emailBody);
       },
   System.Web.HttpContext.Current );

基本上检查连接方法检查 SQl 服务器是否在设置的时间间隔后处于活动状态和运行状态,如果失败则发送电子邮件。我的问题是

检查连接实现

while (true)
{
    Thread.Sleep(600000);                

    using (EntityFMContextctx = new EntityFMContext())
    {
        try
        {
            ctx.Connection.Open();                  
        }
        catch (EntityException ex)
        {
            SendEmail(to, subject, body, ex);
        }                   
    }               
}

问题:

  1. 我怎样才能像我们一样取消这个任务 Thread.Abort 我们也可以取消这个任务吗?

  2. 我们是否需要取消任务,因为当应用程序 End 或 Stop 时。此任务不会自动取消或中止。因为应用程序已结束/已完成。

有人可以指导我如何处理这种情况吗?任何帮助将不胜感激。

4

0 回答 0