实现c#timeout

前端之家收集整理的这篇文章主要介绍了实现c#timeout前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
使用这样的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,
但是在简单的场景中使用它太复杂了 – 你需要考虑线程的同步,是否适当中止它们等等.

解决方法

据我了解,你希望你的方法做完一些工作,直到它完成或直到一段时间过去?我会使用秒表,并检查循环中的经过时间:
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.
}
原文链接:https://www.f2er.com/c/116824.html

猜你在找的C&C++相关文章