我正在尝试管理一个Windows服务的任务列表,这样当我关闭服务时,我可以使用Task.WaitAll()方法来防止服务关闭直到所有剩余的任务完成。例如,我有一个Run()方法,它会执行直到更新布尔变量:
public void Run()
{
while (runFlag)
{
if (MaxTasksAchieved)
{
System.Threading.Thread.Sleep(pollingInterval);
}
else
{
taskList.Add(Task.Factory.StartNew(() =>
{
// do stuff
}));
}
}
}
然后在我的Stop()方法中,我有以下内容:
public void Stop()
{
runFlag = false;
if (taskList.Count > 0)
{
// wait
Task.WaitAll(taskList.ToArray());
}
else
{
// no wait, great.
}
}
我的问题是如何优雅地让任务在执行完成后自动从列表中删除?我希望任务能从列表中删除,这样当调用Stop()时,taskList只包含当前正在进行的任务。
if (MaxTasksAchieved)
和轮询循环可以方便地被任务调度器的MaxDegreeOfParallelism
所替代。 - Asad SaeeduddinWaitAll
,这表示所有任务都已完成,为什么不能只丢弃/忽略列表并继续进行所需的操作?为什么需要清空列表? - Asad Saeeduddin