2010-10-05 4 views
5

Je souhaite exécuter du code à partir d'une action du contrôleur ASP.NET MVC dans un nouveau thread/de manière asynchrone. Je ne me soucie pas de la réponse, je veux tirer et oublier et retourner l'utilisateur une vue pendant que la méthode async fonctionne en arrière-plan. Je pensais que la classe BackgroundWorker était appropriée pour cela? Pourquoi ce code entraîne-t-il un délai de 10 secondes avant de renvoyer la vue? backgroundworker bloquant l'action du contrôleur MVC

public ActionResult MyAction() 
{ 
    var backgroundWorker = new BackgroundWorker(); 
    backgroundWorker.DoWork += Foo; 
    backgroundWorker.RunWorkerAsync(); 

    return View("Thankyou"); 
} 

void Foo(object sender, DoWorkEventArgs e) 
{ 
    Thread.Sleep(10000); 
} 
Pourquoi la vue n'est-elle pas retournée instantanément? Plus précisément, que dois-je faire pour que cela fonctionne?

Merci

Répondre

7

Vous pouvez commencer à nouveau thread:

public ActionResult MyAction() 
{ 
    var workingThread = new Thread(Foo); 
    workingThread.Start(); 

    return View("Thankyou"); 
} 

void Foo() 
{ 
    Thread.Sleep(10000); 
} 
+0

Cheers, demande pourquoi l'arrière-plan a travaillé blocs bien? –

+1

Vous pouvez voir le code de base de BackgroundWorker pour le savoir. BackgroundWorker est un composant WinForms et je pense qu'il n'est pas correct de l'utiliser dans ASP.NET. – bniwredyc

+3

Au lieu de créer manuellement Threads, vous devriez probablement utiliser ThreadPool.QueueUserWorkItem –

Questions connexes