我已经在这个问题上摸不着头几个小时了,我已经和同事起草了,我们都迷失了.这可能是新浓缩咖啡机过多咖啡的情况,或者是周五的事实......我们不确定!
我有以下方法:
private void calcuateEstimatedExecutionTimesForDueJobs(List<TestJob> dueJobs)
{
DateTime rollingTime = DatabaseConnection.getNow();
foreach (TestJob job in dueJobs)
{
job.setEstimatedStart(rollingTime);
double estimatedRuntime = job.getEstimatedRuntime();
rollingTime = rollingTime.AddSeconds(estimatedRuntime);
job.setEstimatedFinish(rollingTime);
}
}
Run Code Online (Sandbox Code Playgroud)
目的是处理我们的应用程序排队等待提供的"TestJobs"列表.我们的TestJob知道"可能"需要多长时间才能运行,所以我希望在这里使用这些信息来预测每个TestJob的"开始"和"完成"时间.
不幸的是,rollingTime永远不会改变.虽然job.getEstimatedRuntime()始终返回正双精度数,但在当前TestJob上调用AddSeconds()并传递此值无效.
我的代码中有错误,还是更险恶的东西?
更新:我注意到这个问题仍然有一些观点.对于那些像我一样遭遇奇怪问题的人,我记得只需重启Visual Studio/Rebooting即可解决这个问题.我想这个问题还时不时出现......(咳咳......)!
小智 6
OBS:参考https://msdn.microsoft.com/en-us/library/system.datetime.addseconds(v=vs.110).aspx
此方法不会更改此 DateTime 的值。相反,它返回一个新的 DateTime,其值是此操作的结果。
根据您的代码创建一个小型测试程序:
public class Program
{
public static void Main(string[] args)
{
List<TestJob> jobList = new List<TestJob>();
jobList.Add(new TestJob() { ID = 1 });
jobList.Add(new TestJob() { ID = 2 });
jobList.Add(new TestJob() { ID = 3 });
jobList.Add(new TestJob() { ID = 4 });
CalcuateEstimatedExecutionTimesForDueJobs(jobList);
foreach (TestJob job in jobList)
{
Console.WriteLine("{0} {1} {2}", job.ID, job.StartDate, job.FinishedDate);
}
Console.ReadLine();
}
private static void CalcuateEstimatedExecutionTimesForDueJobs(List<TestJob> dueJobs)
{
DateTime rollingTime = DateTime.Now;
foreach (TestJob job in dueJobs)
{
job.SetEstimatedStart(rollingTime);
double estimatedRuntime = job.GetEstimatedRuntime();
rollingTime = rollingTime.AddSeconds(estimatedRuntime);
job.SetEstimatedFinish(rollingTime);
}
}
}
public class TestJob
{
public int ID { get; set; }
public DateTime StartDate { get; set; }
public DateTime FinishedDate { get; set; }
public void SetEstimatedStart(DateTime date)
{
this.StartDate = date;
}
public void SetEstimatedFinish(DateTime date)
{
this.FinishedDate = date;
}
public double GetEstimatedRuntime()
{
return 42; //Answer to Life, the Universe, and Everything
}
}
Run Code Online (Sandbox Code Playgroud)
显示一切都按预期工作.控制台输出是:
1 02.10.2009 17:08:43 02.10.2009 17:09:25
2 02.10.2009 17:09:25 02.10.2009 17:10:07
3 02.10.2009 17:10:07 02.10.2009 17:10:49
4 02.10.2009 17:10:49 02.10.2009 17:11:31
Run Code Online (Sandbox Code Playgroud)
就我而言,这是正确的.请仔细检查TestJob类中的相关代码并调试/记录所有内容.