我正在使用C#编写ASP.NET MVC3。 我想在for循环的每次迭代之间添加一些延迟。
for(int i=0; i<5; i++)
{
//some code
//add delay here
}
那我怎么能这样做?
答案 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)
答案 5 :(得分:0)
您可以使用类似延迟一秒的内容:
System.Threading.Thread.Sleep (1000);
虽然确保这仅用于调试目的。比故意放慢软件速度更令人讨厌。
除了稍后介绍性能改进的简单方法之外,当然: - )