我已经在这个问题上摸不着头几个小时了,我已经和同事一起起草了,我们都迷失了。这可能是新浓缩咖啡机过多咖啡的情况,或者是周五的事实......我们不确定!
我有以下方法:
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);
}
}
目的是处理我们的应用程序排队等待提供的“TestJobs”列表。我们的TestJob知道它可能“运行”需要多长时间,所以我希望在这里使用这些信息来预测“开始”和每个TestJob的“完成”时间。
不幸的是,rollingTime永远不会改变。虽然job.getEstimatedRuntime()总是返回一个正的double,但在当前的TestJob上调用AddSeconds()并传递此值无效。
我的代码中是否有错误,或者更险恶的内容?
更新:我注意到这个问题仍然有一些观点。对于那些像我一样遇到奇怪问题的人,我记得只需重新启动Visual Studio /重新启动即可解决这个问题。我想这个问题还时不时出现......(咳咳......)!
答案 0 :(得分:5)
根据您的代码创建一个小型测试程序:
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
}
}
显示一切都按预期工作。控制台输出是:
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
据我所知,这是正确的。 请仔细检查TestJob类中的相关代码并调试/记录所有内容。
答案 1 :(得分:4)
OBS:ref https://msdn.microsoft.com/en-us/library/system.datetime.addseconds(v=vs.110).aspx
此方法不会更改此DateTime的值。相反,它返回一个新的DateTime,其值是此操作的结果。
答案 2 :(得分:2)
这应该没有任何问题。
我建议您尝试将问题转换为short but complete program which demonstrates the problem。您可能还想添加一些登录 - 日志rollingTime
和
每次迭代都estimatedRuntime
。
顺便问一下,您在C#中使用Java约定的原因是什么?