我有C#2.0代码,我正在移植到C#4.0。我想使用System.Task
代替System.ThreadPool.QueueueUserWorkItem
。我还想使用System.Task
代替System.Threading.Timer
。
如何创建定期System.Task
?我在System.Task
或System.TaskFactory
上看不到任何内容。
亲切的考虑,
pKumara
答案 0 :(得分:19)
使用Observable.Interval或Observable.Timer。 Timer允许您传入dueTime
如参见。
// 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);
答案 1 :(得分:3)
您可以尝试使用Observable.Timer返回一个可观察的计时器序列。