取消长时间运行任务

时间:2013-08-21 11:07:30

标签: c# multithreading task-parallel-library

我有一些关于应用程序启动时运行的长时间运行任务的问题。我创建了一个线程,当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. 我们需要取消任务,因为当应用程序结束或停止时。没有这个任务将被取消或自动中止。因为申请是结束/完成。

  3. 有人可以指导我如何处理这种情况。非常感谢。

0 个答案:

没有答案