【发布时间】:2011-06-28 11:35:05
【问题描述】:
使用这样的while循环是不好的做法吗? 也许使用 Stopwatch 更好,或者这个解决方案有一些缺陷?
public void DoWork()
{
//do some preparation
DateTime startTime = DateTime.Now;
int rowsCount = 0;
int finalCount = getFinalCount();
do
{
Thread.Sleep(1000);
rowsCount = getRowsCount(); // gets rows count from database, rows are added by external app.
} while (rowsCount < finalCount && DateTime.Now - startTime < TimeSpan.FromMinutes(10));
}
看到这篇文章Implement C# Generic Timeout, 但是在简单的场景中使用它太复杂了——你需要考虑线程的同步,是否应该中止它们等等。
【问题讨论】:
-
你想对创建 TimeOut 做什么?如果你告诉你的整个场景,也许我们可以提供不同的使用方式。
-
只需要在一段时间后停止工作 - 开始工作,如果运行超过 10 分钟停止工作。调用该方法的线程可以被阻塞。
-
@anderhil:那是什么工作?你控制那个代码吗?你是否意识到通过睡觉,你没有工作?你可能想提供一个更好的例子。
-
@Martinho Fernandes:更新了问题。 getRowsCount 从数据库表中获取行。表由外部应用程序更新,我需要等待通过 getFinalCount 方法获得的数据库中特定数量的行。但是可能会出现什么都没有更新的情况,为了防止无限循环,我想等待一段时间然后停止工作。