私は並列に開始する複数の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それはかなりの質問に対する答えです。 –