Stop running the code after 15 seconds

后端 未结 3 1553
北荒
北荒 2020-12-17 04:03

I\'m trying to write something to stop running the code after 15 seconds of running.

I don\'t want While loop or any kind of loop to be used and would l

相关标签:
3条回答
  • 2020-12-17 04:49

    Better you can use below code, which would help to improve in performance.

    System.Threading.Thread.Sleep(TimeSpan.FromSeconds(2));
    
    0 讨论(0)
  • 2020-12-17 04:50

    You can assign DateTime variable before the loop having the current date and time, then in each loop iteration simply check if 15 seconds have passed:

    DateTime start = DateTime.Now;
    for (int i = 1; i < 100000; i++)
    {
        if ((DateTime.Now - start).TotalSeconds >= 15)
            break;
        Console.WriteLine("This is test no. "+ i+ "\n");
    }
    

    Update: while the above will usually work, it's not bullet proof and might fail on some edge cases (as Servy pointed out in a comment), causing endless loop. Better practice would be using the Stopwatch class, which is part of System.Diagnostics namespace:

    Stopwatch watch = new Stopwatch();
    watch.Start();
    for (int i = 1; i < 100000; i++)
    {
        if (watch.Elapsed.TotalMilliseconds >= 500)
            break;
        Console.WriteLine("This is test no. " + i + "\n");
    }
    watch.Stop();
    
    0 讨论(0)
  • 2020-12-17 04:50

    I'm posting my answer from my older post because it's more relevant here,

    I think you need to measure time and stop the code after particular time say "15 seconds" ,StopWatch class can help you out.

    // Create new stopwatch instance
    Stopwatch stopwatch = new Stopwatch();
    // start stopwatch
    stopwatch.Start();
    // Stop the stopwatch
    stopwatch.Stop();
    // Write result
    Console.WriteLine("Time elapsed: {0}",stopwatch.Elapsed);
    // you can check for Elapsed property when its greater than 15 seconds 
    //then stop the code
    

    Elapsed property returns TimeSpan instance you would do something like this.

    TimeSpan timeGone = stopwatch.Elapsed;
    

    To fit your scenario you can do something like this

    Stopwatch stopwatch = new Stopwatch();
    TimeSpan timeGone;
    // Use TimeSpan constructor to specify:
    // ... Days, hours, minutes, seconds, milliseconds.
    // ... The TimeSpan returned has those values.
    TimeSpan RequiredTimeLine = new TimeSpan(0, 0, 0, 15, 0);//set to 15 sec
    
    While ( timeGone.Seconds < RequiredTimeLine.Seconds )
    {
        stopwatch.Start();
        Start();
        timeGone = stopwatch.Elapsed;
    }
    Stop();//your method which will stop listening
    

    Some useful links
    MSDN StopWatch

    0 讨论(0)
提交回复
热议问题