2010-12-13 3 views
4

Знаете ли вы о каких-либо библиотеках C#, которые позволяют вам последовательно серию действий, т.е. каждое действие выполняется, когда предыдущий закончен, или еще лучше, после определенного временного интервала.C# Библиотеки для временных действий

спасибо.

+1

Я не совсем уверен, что вы ищете здесь, методы, вызываемые в последовательности, не делая никаких усилий для вызова несколько потоков будут выполняться последовательно со следующим вызываемым методом, когда последними заканчивается. Если вы хотите поместить предопределенные паузы между методами, это можно сделать, если текущий поток будет спящим на заданное количество секунд или цикл с условием выхода, которое требует, чтобы он был включен или после определенного времени. Можете ли вы уточнить, что вам нужно? – Robb

+1

IMO его довольно очевидно, что он хочет делать. Его даже столь распространенное требование, что Microsoft реализовала выделенную поддержку для него с помощью метода .ContinueWith() объекта Task в параллельной библиотеке задач. –

ответ

2

Посмотрите на http://msdn.microsoft.com/en-us/library/dd537609.aspx

Метод Task.ContinueWith позволяет указать задачу запускаются при завершении предшествующей задачи.

Пример

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

, вы должны упомянуть, что 'Задача' доступна только в .net 4 –

+0

true, но если в вопросе не указано иное, должно быть безопасно предположить, что код сможет работать на новейшей версии .Net. –

+0

Да, 'Задача' именно то, что я искал, спасибо. – ocodo

2

для времени пробовать quartz.net. для синхронизации действий используйте, например. события, waithandles, Monitor.Wait() и Monitor.Pulse() ...

в противном случае вы можете обрабатывать набор действий, например

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

, но это имеет смысл только, если у вас нет замедлителя-метод (sequencial обработки) или ваши методы не должны знать друг о друге.

0

Для запланированных задач, которые вы ищете библиотеку, которая поддерживает работу хрон. Вот один, который я использовал в проекте.

http://blog.bobcravens.com/2009/10/an-event-based-cron-scheduled-job-in-c/

Много библиотек существуют. Я обнаружил, что многие из них богаты и немного тяжелы.

Надеюсь, это поможет.

Боб