【问题标题】:How to add some delay between each iteration of for loop in C#?如何在 C# 中 for 循环的每次迭代之间添加一些延迟?
【发布时间】:2012-08-14 05:28:48
【问题描述】:

我正在使用 C# 开发 ASP.NET MVC3。 我想在 for 循环的每次迭代之间添加一些延迟。

for(int i=0; i<5; i++)
{
    //some code
    //add delay here
}

那么我该怎么做呢?

【问题讨论】:

  • 嘿,我也需要这样做。不睡觉你是怎么做到的

标签: c# asp.net-mvc-3 for-loop timer


【解决方案1】:

正如其他答案所说,使用Thread.Sleep 会使线程休眠......但鉴于您正在编写一个网络应用程序,我认为它不会按照您的意愿行事。

如果目标是让用户一次看到一秒钟发生的事情,您需要将延迟放在客户端。如果您在发送 HTTP 响应之前有五个一秒延迟,这仅意味着用户必须等待五秒才能看到您的结果页面。

听起来您应该使用 AJAX 来执行此操作。

编辑:正如 cmets 中所述,可能值得您查看 window.setTimeout Javascript 调用。 (我不“做”Javascript,所以恐怕我无法提供任何关于这方面的细节。)

【讨论】:

  • 我什至建议在 Javascript 中提及 setTimeout() 给他一些搜索结果。
【解决方案2】:

最简单的方法是让当前线程休眠。

System.Threading.Thread.Sleep (200);

但请记住,Web 应用程序中的线程是非常宝贵的资源,将线程置于睡眠状态仍然会使线程保持忙碌状态。

在 Web 应用程序中通常没有充分的理由这样做。
您需要这样做的任何问题都可以以更好的方式解决

【讨论】:

    【解决方案3】:

    已经描述的另一种方法可能是Reactive Extensions (Rx)。那里有一些方法可以及时生成值序列。在您的情况下,您可以使用以下代码。

    var values = Observable.Generate(
            0,           // Initializer.
            i => i < 5,  // Condition.
            i => i + 1,  // Iteration.
            i => i,      // Result selector.
            i => TimeSpan.FromSeconds(1));
    var task = values
        .Do(i => { /* Perform action every second. */ })
        .ToTask();
    values.Wait();
    

    ToTask 调用允许您等待IObservable 完成。如果你不需要这个,你可以把它放在外面。 Observable.Generate 在特定时间戳生成一系列值。

    【讨论】:

      【解决方案4】:

      你可以使用Thread.Sleep();

      int milliseconds = 5000;
      Thread.Sleep(milliseconds);
      

      这会停止当前线程的执行 5 秒。

      【讨论】:

        【解决方案5】:

        怎么样

        System.Threading.Thread.Sleep(1000);
        

        Thread.Sleep Method (Int32)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-01-14
          • 1970-01-01
          • 1970-01-01
          • 2013-10-11
          • 1970-01-01
          • 1970-01-01
          • 2017-04-03
          • 1970-01-01
          相关资源
          最近更新 更多