2010-12-13 16 views
4

connaissez-vous des bibliothèques C# qui vous permettent de séquencer une série d'actions, c.-à-d. chaque action s'exécutant quand le précédent a fini, ou mieux encore, après qu'un intervalle de temps spécifique s'est produit.Bibliothèques C# pour les actions temporisées

Merci.

+1

Je ne suis pas sûr de ce que vous cherchez ici, les méthodes appelées dans l'ordre sans faire aucun effort pour appeler plusieurs threads fonctionnent de façon séquentielle avec la méthode suivante invoquée lorsque les dernières extrémités. Si vous voulez mettre des pauses prédéfinies entre les méthodes, cela peut être fait en mettant le thread courant en veille pendant un certain nombre de secondes ou en bouclant avec une condition de sortie qui l'exige à ou après un certain temps. Pouvez-vous clarifier ce dont vous avez besoin? – Robb

+1

IMO est assez évident ce qu'il veut faire. C'est même une exigence si commune que Microsoft a implémenté un support dédié pour cela via sa méthode .ContinueWith() sur un objet Task dans la bibliothèque parallèle de tâches. –

Répondre

2

Regardez http://msdn.microsoft.com/en-us/library/dd537609.aspx

La méthode Task.ContinueWith laisser vous spécifiez une tâche à démarrer lorsque la tâche antécédente complète.

Exemple

var task = Task.Factory.StartNew(() => GetFileData()) 
             .ContinueWith((x) => Analyze(x.Result)) 
             .ContinueWith((y) => Summarize(y.Result)); 
+1

vous devriez mentionner, que 'Task' est seulement disponible en .net 4 –

+0

true, mais sauf indication contraire dans la question, il devrait être prudent de supposer le code pour pouvoir fonctionner sur la version la plus récente de .Net. –

+0

Oui, 'Task 'est exactement ce que je cherchais, merci. – ocodo

2

pour l'essai de synchronisation quartz.net. pour synchroniser les actions, utilisez par exemple. événements, waithandles, Monitor.Wait() et Monitor.Pulse() ...

sinon vous pouvez gérer un ensemble d'actions, par exemple

var methods = new List<Func> 
{ 
    FooMethod1, 
    FooMethod2 
} 
foreach (var method in methods) 
{ 
    method.Invoke(); 
} 

mais cela n'a de sens, si vous ne disposez pas d'un modérateur méthode (traitement séquentiel) ou vos méthodes ne devraient pas se connaître les unes les autres.