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

C# 任务具有计时器已过事件时的任务状态,c#,.net,task-parallel-library,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.Star

我使用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[]tasks=新任务[n];
对于(int i=0;i<20;i++)
{
tasks[i]=Task.Factory.StartNew(()=>
{
工作=新工作();
工作;
返回1;
}
);
}
公共工作
{
System.Timers.Timer aTimer=新的System.Timers.Timer(1000);
aTimer.Appead+=新的ElapsedEventHandler(OnTimedEvent);
aTimer.Start()
};

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

正在完成的任务是否有问题?如果是的话,你能详细说明原因吗


FWIW,任务通常很适合单个未来值。如果你希望每X秒发生一件事,要么直接创建/使用定时器(不需要任务),要么考虑使用像“可观测”间隔这样的东西来获得每X秒的持续值流。p> 谢谢你的解释。但我有一个疑问。在这种特殊情况下,任务将创建一个线程,线程将创建一个计时器。那么,既然任务完成,线程是否会终止?当创建计时器时,它是否会生成一个独立的线程来继续调用事件?