任务具有计时器已过期事件时的任务状态

时间:2013-04-08 12:37:56

标签: c# .net task-parallel-library

我使用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()
};

1 个答案:

答案 0 :(得分:1)

每个任务主体只创建一个计时器,因此当您点击返回时,任务就完成了。计时器不会阻止任务。

完成任务是否有问题?如果是这样,你能详细说明原因吗?

FWIW,Task通常非常适合单一的未来价值。如果你希望每X秒发生一次,或者直接创建/使用定时器(不需要任务)或者考虑使用像Observable.Interval这样的东西来每隔X秒获得一个持续的值流。