2013-08-02 33 views
8

Tôi có mã C# 2.0 mà tôi đang chuyển sang C# 4.0. Tôi muốn sử dụng số System.Task thay cho số System.ThreadPool.QueueueUserWorkItem. Tôi cũng muốn sử dụng số System.Task thay cho số System.Threading.Timer.Cách tạo tác vụ định kỳ

Làm cách nào để tạo một định kỳ System.Task? Tôi không thấy bất cứ điều gì trên System.Task hoặc System.TaskFactory.

liên quan Kind để xem xét,

pKumara

+0

Có gì sai với một 'Timer'? Bạn có thể sử dụng gọi lại bộ hẹn giờ để bắt đầu tác vụ mới nếu muốn. –

+1

có thể trùng lặp của [Có thay thế dựa trên Tác vụ cho System.Threading.Timer?] (Http://stackoverflow.com/questions/4890915/is-there-a-task-based-replacement-for-system-threading- hẹn giờ) –

Trả lời

3

Bạn có thể thử với Observable.Timer mà Trả về một chuỗi quan sát của timer.

18

Sử dụng Observable.Interval hoặc Observable.Timer. Bộ hẹn giờ cho phép bạn chuyển vào một thời gian đến hạn

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

Rất cám ơn. Tôi đang cố gắng chấp nhận câu trả lời của bạn nhưng lỗi không xác định đã xảy ra. –

+0

Lạ, nhưng vui vì nó đã trả lời câu hỏi của bạn! –

+2

Bạn phải thêm 'Tiện ích mở rộng phản hồi - Thư viện truy vấn' từ gói NuGet để có sẵn không gian tên có thể quan sát được. – douglaslps

Các vấn đề liên quan