启动一个长时间的后台任务

本文关键字:长时间 后台任务 一个 启动 | 更新日期: 2023-09-27 18:27:32

用户在我的网站上请求一些页面。

我想做什么?向用户发送一个快速答案并启动需要很长时间的后台任务。它看起来像:

public ActionResult index()
{
    var task = new Task(Stuff);
    //start task async
    task.start(); 
    return View();
}
public void Stuff()
{
    //long time operation    
}

我该怎么做?

启动一个长时间的后台任务

您可以向Task StartNew()方法传递一个参数,该参数表示您正在启动的任务是"长时间运行的",它为任务调度器提供了在新线程上启动任务的提示。

var task = Task.Factory.StartNew(Stuff, TaskCreationOptions.LongRunning);

下面是MSDN中的一个示例http://msdn.microsoft.com/en-us/library/ms978607.aspx#diforwc-ap02_plag_howtom多线程

虽然ASP.NET MVC需要它,但您可以使用此ASP.NET WebForms示例的核心思想。

方法是创建一个工作线程来完成您的工作,启动它并向用户发送一个"等待"页面。这个"等待"页面将每隔N秒刷新一次,查找工作线程处理的结果。完成后,"等待"页面将显示结果。

您想要定义一个委托并在返回之前将其激发。例如,请参见:http://msdn.microsoft.com/en-us/magazine/cc301332.aspx