J'ai une application qui traite les transferts de fichiers. Dans certains cas, j'ai besoin de lancer des exécutables de pré/post-traitement qui font des choses avec les fichiers.Lancer le processus à partir du thread de travail Threadpool (et attendre si nécessaire)
Ainsi, l'ordre des événements (en bref) serait comme ceci:
fil- de travail est créé
- travailleur se rend compte qu'il a besoin de lancer un exécutable pré-traitement avant de commencer le transfert prétraiter est lancé, le travailleur attend ... s'il attend trop longtemps, le transfert ne se produira pas et le thread devrait terminer gracieusement
- Le fichier est transféré
- Le travailleur se rend compte qu'il doit lancer un exécutable de post-traitement après le transfert est finishe d
- post-processus est lancé, un travailleur ne se soucie pas d'attendre
Fondamentalement, je ne me soucie pas combien de temps le processus post-exécutable court après le transfert a eu lieu. Par conséquent, devrais-je anticiper des problèmes si je lance le processus à partir d'un thread qui est ensuite retourné à la piscine?
// processus post
Process process = null;
ProcessStartInfo psi = new ProcessStartInfo(executable, args);
psi.UseShellExecute = true;
try
{
process = Process.Start(psi);
//The pre-process simply calls Process.WaitForExit(timeout value)
launched = true;
}
catch (InvalidOperationException) { }
catch (ArgumentException) { }
catch (System.ComponentModel.Win32Exception) { }
catch (System.IO.FileNotFoundException) { }
Je voudrais ajouter à cette réponse la recommandation d'utiliser 'Task' objets (si vous êtes sur .NET 4.0). Ils propagent proprement des exceptions et soutiennent un modèle d'annulation unifié. –