从一个方法启动任务并从另一个方法中取消它

时间:2012-11-27 17:11:58

标签: asp.net-mvc-3 c#-4.0 task-parallel-library

我开始使用Task机制,我无法弄清楚如何使用 制作

  • 启动工作的方法
  • 另一个取消这个。

使用相同的方法进行创建和取消(与StartTask中的注释代码一样)。

但是当我使用我的CancelTask​​方法时,它不起作用! (作业继续转动,taskProgress继续增加)。

我的框架版本是.NET 4,项目是ASP.NET MVC 3

提前感谢!

private static int taskProgress = 0;
public CancellationTokenSource ts = new CancellationTokenSource();

public ActionResult StartTask()
{
    Task.Factory.StartNew(() =>
    {
        while (true)
        {
            if (ts.IsCancellationRequested)
                break;

            Thread.Sleep(100);
            taskProgress++;
        }
    }, ts.Token);

    //Thread.Sleep(3000);
    //ts.Cancel();

    return RedirectToAction("GetTaskProgress");
}

public ActionResult CancelTask()
{
    ts.Cancel();
    return Content("Cancelled (percentage="+taskProgress.ToString()+")");
}

public ActionResult GetTaskProgress()
{
    return Content(taskProgress.ToString());
}

1 个答案:

答案 0 :(得分:0)

我刚刚找到了解决方案。 CancellationTokenSource必须是静态的。

public static CancellationTokenSource ts = new CancellationTokenSource();