如何在C#中每次迭代for循环之间添加一些延迟?

时间:2012-08-14 05:28:48

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

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

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

那我怎么能这样做?

6 个答案:

答案 0 :(得分:11)

正如其他答案所说的那样,使用Thread.Sleep会使线程处于休眠状态......但鉴于您正在编写一个Web应用程序,我认为它不会按照您的要求执行。< / p>

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

听起来你应该用AJAX做这件事。

编辑:正如评论中所述,您可能值得查看window.setTimeout Javascript调用。 (我不是“做”Javascript,所以我担心我无法帮助解决这方面的任何细节。)

答案 1 :(得分:3)

最简单的方法是让当前线程进入休眠状态。

System.Threading.Thread.Sleep (200);

请记住,Web应用程序中的线程是非常宝贵的资源,让一个人进入睡眠仍然会使线程忙碌。

在网络应用程序中通常没有充分的理由这样做 无论您需要做什么问题,都可以更好地解决

答案 2 :(得分:2)

另一种已经描述过的方法可能是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在特定时间戳生成一系列值。

答案 3 :(得分:1)

您可以使用Thread.Sleep();

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

这将停止执行当前线程5秒钟。

答案 4 :(得分:0)

这样的东西
System.Threading.Thread.Sleep(1000);

Thread.Sleep Method (Int32)

答案 5 :(得分:0)

您可以使用类似延迟一秒的内容:

System.Threading.Thread.Sleep (1000);

虽然确保这仅用于调试目的。比故意放慢软件速度更令人讨厌。

除了稍后介绍性能改进的简单方法之外,当然: - )