我有我正在移植到C#4.0的C#2.0代碼。我想利用System.Task
代替System.ThreadPool.QueueueUserWorkItem
。我也想用System.Task
代替System.Threading.Timer
。如何創建週期性任務
如何創建週期性System.Task
?我沒有看到System.Task
或System.TaskFactory
上的任何內容。
親切的問候審議,
pKumara
我有我正在移植到C#4.0的C#2.0代碼。我想利用System.Task
代替System.ThreadPool.QueueueUserWorkItem
。我也想用System.Task
代替System.Threading.Timer
。如何創建週期性任務
如何創建週期性System.Task
?我沒有看到System.Task
或System.TaskFactory
上的任何內容。
親切的問候審議,
pKumara
您可以Observable.Timer返回定時器可觀察到的序列嘗試。
使用Observable.Interval或Observable.Timer。定時器允許你通過一個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);
非常感謝。我試圖接受你的回答,但發生了未知的錯誤。 –
奇怪,但很高興它回答你的問題! –
爲了讓Observable命名空間可用,您必須從NuGet包中添加'Reactive Extensions - Query library'。 – douglaslps
這有什麼錯了'Timer'?如果需要,您可以使用計時器回調開始新任務。 –
可能的重複[是否有基於任務的替換System.Threading.Timer?](http://stackoverflow.com/questions/4890915/is-there-a-task-based-replacement-for-system-threading-定時器) –