使用这样的while循环是不好的做法吗? 也许最好使用秒表,或者这个解决方案有一些陷阱?
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, 但是在简单的场景中使用它太复杂了 - 你需要考虑线程的同步,是否适当中止它们等等。
答案 0 :(得分:16)
据我所知,您希望自己的方法能够完成一些工作,直到完成或直到某段时间过去为止?我会使用Stopwatch
来检查循环中经过的时间:
void DoWork()
{
// we'll stop after 10 minutes
TimeSpan maxDuration = TimeSpan.FromMinutes(10);
Stopwatch sw = Stopwatch.StartNew();
DoneWithWork = false;
while (sw.Elapsed < maxDuration && !DoneWithWork)
{
// do some work
// if all the work is completed, set DoneWithWork to True
}
// Either we finished the work or we ran out of time.
}
答案 1 :(得分:1)
最好使用System.Timers.Timer类。