2013-08-02 4 views
8

У меня есть коды C# 2.0, которые я переношу на C# 4.0. Я хочу использовать System.Task вместо System.ThreadPool.QueueueUserWorkItem. Я также хочу использовать System.Task вместо System.Threading.Timer.Как создать периодическую задачу

Как создать периодический System.Task? Я ничего не вижу на System.Task или System.TaskFactory.

С наилучшими пожеланиями для рассмотрения,

pKumara

+0

Что случилось с 'Timer'? Вы можете использовать обратный вызов таймера, чтобы начать новую задачу, если хотите. –

+1

Возможный дубликат [Есть ли замена на основе задачи для System.Threading.Timer?] (Http://stackoverflow.com/questions/4890915/is-there-a-task-based-replacement-for-system-threading- таймер) –

ответ

3

Вы можете попробовать с Observable.Timer который возвращает наблюдаемую последовательность таймера.

18

Использование Observable.Interval или Observable.Timer. Таймер позволяет пройти в должное время

e.q.

  // Repeat every 2 seconds. 
     IObservable<long> observable = Observable.Interval(TimeSpan.FromSeconds(2)); 

     // Token for cancelation 
     CancellationTokenSource source = new CancellationTokenSource(); 

     // Create task to execute. 
     Action action = (() => Console.WriteLine("Action started at: {0}", DateTime.Now)); 
     Action resumeAction = (() => Console.WriteLine("Second action started at {0}", DateTime.Now)); 

     // Subscribe the obserable to the task on execution. 
     observable.Subscribe(x => { Task task = new Task(action); task.Start(); 
             task.ContinueWith(c => resumeAction()); 
     }, source.Token); 

enter image description here

+0

Большое спасибо. Я пытаюсь принять ваш ответ, но произошла неизвестная ошибка. –

+0

Странно, но рад, что он ответил на ваш вопрос! –

+2

Вы должны добавить 'Reactive Extensions - Query library' из пакета NuGet, чтобы иметь доступное пространство имен Observable. – douglaslps

Смежные вопросы