0

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

1 回答 1

1

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

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

FWIW,Task 通常非常适合单个未来值。如果您希望每 X 秒发生一次,要么直接创建/使用计时器(不需要任务),要么考虑使用 Observable.Interval 之类的东西每 X 秒获取一个持续的值流。

于 2013-04-08T13:49:28.963 回答