我使用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()
};
答案 0 :(得分:1)
每个任务主体只创建一个计时器,因此当您点击返回时,任务就完成了。计时器不会阻止任务。
完成任务是否有问题?如果是这样,你能详细说明原因吗?
FWIW,Task通常非常适合单一的未来价值。如果你希望每X秒发生一次,或者直接创建/使用定时器(不需要任务)或者考虑使用像Observable.Interval这样的东西来每隔X秒获得一个持续的值流。