[英]Task status when task has a timer elapsed event
我正在使用TPL创建并行任务。 每个任务都有经过计时器的事件,因此每隔2秒就会调用另一个方法。 这将持续很长时间。 但是,在调用计时器事件的状态下,任务状态为“ RanToCompletion”。 当任务每隔几秒钟调用一次事件计时器时,任务如何处于此状态? 示例代码如下。
Task<int>[] tasks = new Task<int>[n];
for (int i = 0; i < 20; i++)
{
tasks[i] = Task<int>.Factory.StartNew(() =>
{
Work work = new Work();
work.doWork();
return 1;
}
);
}
public void doWork()
{
System.Timers.Timer aTimer = new System.Timers.Timer(1000);
aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
aTimer.Start()
};
每个Task主体仅创建一个计时器,因此当您按返回键时,该Task完成。 计时器不会阻止任务。
任务完成是否有问题? 如果是这样,您能否详细说明原因?
FWIW,任务通常很适合单个未来价值。 如果您希望每X秒发生某件事,请直接创建/使用计时器(无需执行任务),或者考虑使用类似Observable.Interval的方法每隔X秒获取一次持续的值流。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.