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