2016-12-12 1 views
0

Le code fonctionne correctement pendant quelques heures échouent alors avant de lancer à nouveau pendant quelques heures ...BackgroundWorker avec de longs await, ne se déclenche pas périodiquement comme prévu

Le projet est une application web avec service WCF, en cours d'exécution sur IIS . Le BGW est lancé sur Application.Start()

Je le soupçonne en raison du recyclage d'IIS. Mon approche est-elle incorrecte? Comment puis-je faire le BGW fonctionne de manière fiable

public void MyWorks() 
 
     { 
 
      BackgroundWorker worker = new BackgroundWorker(); 
 
      worker.WorkerSupportsCancellation = true; 
 
      worker.DoWork += new DoWorkEventHandler(DoWork); 
 
      worker.RunWorkerAsync(); 
 
     } 
 

 
private static async void DoWork(object sender, DoWorkEventArgs e) 
 
     { 
 
      BackgroundWorker worker = sender as BackgroundWorker; 
 
      int delay = 60; 
 
      while (!worker.CancellationPending) 
 
      { 
 
       await Task.Delay(TimeSpan.FromMinutes(delay)); 
 
       //do things here 
 
      } 
 
     }

+1

[Comment exécuter des tâches d'arrière-plan dans ASP.Net] (http://www.hanselman.com/blog/HowToRunBackgroundTasksInASPNET.aspx) –

+0

http://stackoverflow.com/questions/536681/can -i-utiliser-threads-à-effectuer-long-running-emplois-sur-iis Merci, après plus de recherches de votre poste, j'ai décidé de changer la mise en œuvre, peut-être que je vais aller avec HangFire – qkhanhpro

+0

le premier travailleur de fond avant de courir la 2ème fois? Il y a une ressource qui n'est pas disposée dans le travail de fond. L'arrière-plan lui-même se dispose à appeler le consturctor (new BackgroundWorker) mais quelque chose à l'intérieur du worker ne l'est pas. – jdweng

Répondre

0

Je comprends maintenant qu'il est recommandé de ne pas exécuter/lancer BackgroundWorker (en particulier avec de longs await/retard) dans l'application Web AST.NET comme il peut être (non?) d'arrêt expectedly

Créer un service Windows/Application Console/tâches planifiées le cas échéant au lieu

Sinon, suivez ce Artice

http://www.hanselman.com/blog/HowToRunBackgroundTasksInASPNET.aspx