2011-04-18 3 views
0

J'ai mis en place un processus pour créer de nouvelles tâches pour gérer le traitement de fichiers. Un problème est survenu lorsque j'ai reçu et non géré une erreur d'exception et en cliquant simplement sur le bouton continuer, le processus principal a continué à fonctionner. Maintenant, j'ai aussi trouvé que dans la tâche enfant, j'avais une erreur de conflit de fichiers et comme les tâches s'exécutaient en tant que .exe séparé, j'avais l'impression que tout aurait été thread safe. Donc, pour le premier problème, voici la création de tâches dans le processus principal. GProcess est un projet complet composé de 6 classes. Ceci est ajouté en tant que référence de la bibliothèque de classe à la classe principale de processus form1Gestion des exceptions de fabrique de tâches

Public Class Form1 
..Private parser as GProcess.module = new GProcess.module() 

dim factory as new taskfactory 
factory.startnew(address of parser.main) 

try 
    task.waitall() 
catch ae as aggregateexception 
    for each ex in ae.innerexceptions 
    logs.insert(ex.message.tostring) 
    next 
finally 
    parser.ctsources.cancel() 
end try 

maintenant je suis la chose AggregateException de msdn et ne savez pas comment la mettre en œuvre mais, fondamentalement, ce que je veux est annuler la tâche qui a provoqué l'exception et continuer à exécuter toutes les autres tâches et capturer le fichier sur lequel travaillait la tâche annulée et enregistrer le nom dans mes journaux ou, si possible, redémarrer cette tâche avec le fichier sur lequel elle travaillait ..

Maintenant pour le deuxième numéro que j'ai un xmlwriter étant créé quand une classe est accédée par la tâche qui devrait créer sa propre instance, donc je ne sais pas pourquoi il y a un conflit mais si cela arrive, la tâche/thread annule-t-elle ou est-ce pour accéder au fichier.

.... 
public class filecleaner 

private xmlfile as string = directoryPath & filename 
private xwriter as xmltextwriter = new xmltextwriter(xmlfile,nothing) 
.... 

Répondre

1

Pour votre deuxième question, la tâche ne sera pas attendre l'accès au fichier, il va lancer une exception, que vous devez prendre, mettre en pause, puis essayer de nouveau (jusqu'à une certaine limite de comptage, je suppose) si vous voulez ce genre de comportement. Pour la première fois, je ne suis pas sûr qu'il y en ait assez pour continuer ici. Par exemple, pourquoi dites-vous que "les tâches s'exécutent en tant que .exe séparé"? Si vous ne faites que lancer des objets d'arrière-plan, par exemple, ils ne s'exécutent pas en tant que "Processus" séparés (c'est-à-dire exe), ils ne sont que des threads.

Rien dans ce code ne suggère que vous ayez des processus séparés pour vos tâches, mais, selon ce qui se passe dans startne, je suppose que c'est possible.

+0

merci pour votre réponse ... J'ai ajouté une modification ci-dessus mais aussi pour clarifier..J'ai tout project.exe ajouté comme référence au processus principal .. il est alors appelé comme une tâche ... Je vais utiliser votre suggestion pour le deuxième numéro – vbNewbie