【发布时间】:2017-09-14 08:28:46
【问题描述】:
我有多个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());
--设置定时器--
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
)
);
}
【问题讨论】:
-
为什么要用定时器而不是简单的
Tasks? -
给
Task.Run的Action只是构造了Timer对象。所以只要Timer被构造,任务就完成了。 -
@YacoubMassad 这几乎是问题的答案。
-
你打算什么时候开始计时?=!
-
如果您发布了有效的代码,那就太好了。你已经声明了
todayTask,然后你继续使用它作为todayTasks。
标签: c# multithreading timer