2012-03-13 23 views
13

El usuario solicitó alguna página en mi sitio web.Iniciar una tarea de fondo de larga duración

¿Qué quiero hacer? Envíe al usuario una respuesta rápida e inicie la tarea en segundo plano, lo que lleva mucho tiempo. Parece que :

public ActionResult index() 
{ 
    var task = new Task(Stuff); 

    //start task async 
    task.start(); 

    return View(); 
} 

public void Stuff() 
{ 
    //long time operation  
} 

¿Cómo puedo hacerlo?

+4

¿Cómo puedo hacer qué? Ya tienes el código, ¿qué tiene de malo? – svick

Respuesta

18

Puede pasar el método Task StartNew() un parámetro que indica que la tarea que está iniciando es de "larga ejecución", lo que proporciona una pista al Programador de tareas para iniciar la tarea en un nuevo hilo.

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

He aquí un ejemplo de MSDN http://msdn.microsoft.com/en-us/library/ms978607.aspx#diforwc-ap02_plag_howtomultithread

Mientras que lo necesite para ASP.NET MVC, puede utilizar la idea central de este ejemplo ASP.NET Web Forms.

El enfoque es crear un hilo de trabajo para hacer su trabajo, iniciarlo y enviar una página de "espera" al usuario. Esta página de "espera" se actualizará cada N segundos, buscando los resultados procesados ​​por el hilo de trabajo. Cuando termina, la página de "espera" muestra los resultados.

Cuestiones relacionadas