2012-03-13 16 views
13

Kullanıcı sitemde bir sayfa talep ediyor.Uzun zamandır arka plan görevini başlat

Ne yapmak isterim? Kullanıcıya hızlı bir cevap gönderin ve uzun bir zaman alan arka plan görevini başlatın. Öyle görünüyor:

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

    //start task async 
    task.start(); 

    return View(); 
} 

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

ben bunu nasıl yapabilirim? Bir temsilci tanımlamak ve geri göndermeden önce onu kapatmak için

+4

Neyi nasıl yapabilir? Kodu zaten aldın, neyin var? – svick

cevap

18

Başladığınız görevin olduğunu belirten bir parametre olan Task StartNew() yöntemini, görevi yeni bir iş parçacığı üzerinde başlatmak için Görev Zamanlayıcı'ya bir ipucu sağlayan "uzun süre çalışan" olduğunu iletebilirsiniz.

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

Burada ASP.NET MVC için ihtiyaç ederken, bu ASP.NET WebForms örnek çekirdek fikir kullanabilirsiniz MSDN http://msdn.microsoft.com/en-us/library/ms978607.aspx#diforwc-ap02_plag_howtomultithread

bir örnek.

Yaklaşım, işinizi yapmak, başlatmak ve kullanıcıya "bekleme" sayfası göndermek için bir çalışan iş parçacığı oluşturmaktır. Bu "bekleme" sayfası, çalışan iş parçacığı tarafından işlenen sonuçları bulmak için her N saniyede yenilenir. Tamamlandığında, "bekleyen" sayfa sonuçları gösterir.