Question

Je crée un service gagnant qui surveille les journaux ftp, lorsqu'un fichier a été téléchargé, je veux commencer une application externe, comme un script Powershell, pour faire des choses avec le fichier. ma question est de savoir si je veux tourner ce loin dans un autre thread quand je le fais ou devrais-je attendre jusqu'à ce qu'il se termine avant de passer.

Ce processus va déjà être dans un thread (le service va être suivi de plusieurs serveurs) et l'idée de fils à partir des fils me préoccupe. Est-ce quelque chose d'être inquiet au sujet ou est-ce un cas de papillote trop dans mon chapeau.

Était-ce utile?

La solution

Eh bien, le code dans un mode modulaire et ne vous inquiétez pas des fils. Si, sur la route, vous trouvez que votre application bénéficiera d'une approche multi-thread adresse puis ensuite. Si vous avez construit vos composants orthogonalement alors la partie filetage s'adaptera plus naturellement.

Répondre aux préoccupations de filetage au début d'une application se sentent toujours comme l'optimisation trop tôt pour moi. Construire les composants d'abord et vous soucier de la façon de les enfiler plus tard.

[Modifier] Je suis en aucune façon que vous conseiller de ne pas penser filetage du tout. Chaque composant doit être construit avec le potentiel d'utilisation par plusieurs threads - c'est une pratique défensive et intelligente dans toutes les applications. Ce que je voulais dire, ne vous inquiétez pas tant sur la façon dont l'application se chargera de threads et comment mettre en place la gestion de fil de la première application.

Autres conseils

Je pense que la question la plus importante est ce que vous obtenez de fraie un autre thread? Si vous n'avez pas besoin d'avoir le code d'exécuter en parallèle, alors ne le faites pas. Si vous le faites, il devrait y avoir aucun problème. Si vous êtes concernés par le fil de l'enfant créant son propre thread, puis déléguer la création de fil à la ThreadPool.

La principale question: avez-vous besoin de connaître le résultat de ce processus? Si vous pouvez tirer et oublier, puis le faire - il est plus facile. Si vous avez besoin du résultat, puis attendre.

Aussi, avez-vous pensé à utiliser le FileSystemWatcher? Il travaille à distance.

Bien que quelque peu hors-sujet, puisque vous avez mentionné que vous lancer un script Powershell, je voulais signaler la possibilité d'exécuter le script en cours via un powershell « runspace ». Voici un minimum Exemple:

using System.Management.Automation;
static class PoshExec
{
    static void Exec(string scriptFilePath)
    {
        (new RunspaceInvoke()).Invoke("& " + scriptFilePath);
    }
}

ajouter une référence à c: \ Program Files \ référence Assemblies \ Microsoft \ WindowsPowerShell \ v1.0 \ System.Management.Automation.dll

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top