2013-08-02 13 views
8

Ho codici C# 2.0 che sto eseguendo il porting su C# 4.0. Voglio utilizzare System.Task al posto di System.ThreadPool.QueueueUserWorkItem. Voglio anche fare uso di System.Task al posto di System.Threading.Timer.Come creare un'attività periodica

Come si crea un periodico System.Task? Non vedo nulla su System.Task o System.TaskFactory.

Cordiali saluti a titolo oneroso,

pKumara

+0

Cosa c'è di sbagliato con un 'Timer'? È possibile utilizzare la richiamata del timer per avviare la nuova attività, se lo si desidera. –

+1

possibile duplicato di [Esiste una sostituzione basata su attività per System.Threading.Timer?] (Http://stackoverflow.com/questions/4890915/is-there-a-task-based-replacement-for-system-threading- timer) –

risposta

3

Si può provare con Observable.Timer che restituisce una sequenza osservabile di timer.

18

Utilizzare Observable.Interval or Observable.Timer. Timer consente di passare in una scadenza

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

Molte grazie. Sto cercando di accettare la tua risposta ma si è verificato un errore sconosciuto. –

+0

Strano, ma contento che abbia risposto alla tua domanda! –

+2

Devi aggiungere 'Reactive Extensions - Query library' da un pacchetto NuGet per avere lo spazio dei nomi Observable disponibile. – douglaslps

Problemi correlati