我有多个System.Threading.Timer
并行启动。最后,我有一个Task.Wait
等待所有任务完成。但它不等所有,我怎样才能让它等待所有?如何等待所有计时器任务完成?
private List<Task> todayTasks = new List<Task>();
foreach (var item in todayReport)
{
todayTasks.Add(SetupTimer(item.Exec_Time, item.Report_Id));
}
Task.WaitAll(todayTasks.ToArray());
--SetupTimer--
private Task SetupTimer(DateTime alertTime, int id)
{
DateTime current = DateTime.Now;
TimeSpan timeToGo = alertTime.TimeOfDay - current.TimeOfDay;
if (timeToGo < TimeSpan.Zero) {
//TODO: ERROR time already passed
}
ExecCustomReportService executeCustom = new ExecCustomReportService();
return Task.Run(
() => new Timer(
x => executeCustom.AdhockReport(id), null, timeToGo, Timeout.InfiniteTimeSpan
)
);
}
为什么要使用定时器,而不是简单的'Task's? – Sinatr
给予Task.Run的'Action'只是构造'Timer'对象。因此,只要构建了Timer,任务就完成了。 –
@YacoubMassad这几乎是对这个问题的回答。 –