2013-08-02 19 views
8

C# 4.0 için taşıdığım C# 2.0 kodlarım var. System.ThreadPool.QueueueUserWorkItem'un yerine System.Task'dan yararlanmak istiyorum. Ayrıca System.Threading.Timer yerine System.Task'dan yararlanmak istiyorum.Periyodik görev oluşturma

Periyodik bir System.Task nasıl oluştururum? System.Task veya System.TaskFactory'da hiçbir şey görmüyorum. değerlendirilmek üzere

Saygılarımızla

pKumara

+0

bir 'Timer' nesi var? İsterseniz yeni görevinizi başlatmak için zamanlayıcı geriçağırımını kullanabilirsiniz. –

+1

olası bir kopyası var [System.Threading.Timer için Görev temelli bir değiştirme var mı?] (Http://stackoverflow.com/questions/4890915/is-there-a-task-based-replacement-for-system-threading- zamanlayıcı) –

cevap

3

Sen zamanlayıcı gözlemlenebilir bir dizisini döndürür Observable.Timer ile deneyebilirsiniz.

18

Use Observable.Interval or Observable.Timer. Zamanlayıcı, bir dueTime

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

Çok teşekkürler. Cevabınızı kabul etmeye çalışıyorum ama bilinmeyen bir hata oluştu. –

+0

Garip, ama soruyu cevapladı sevindim! –

+2

Gözlemlenebilir ad alanının kullanılabilmesi için bir "NuGet paketinden" Reaktif Uzantılar - Sorgu kitaplığı "eklemeniz gerekir. – douglaslps

İlgili konular