我正在使用 C# 开发 ASP.NET MVC3。我想在 for 循环的每次迭代之间添加一些延迟。
for(int i=0; i<5; i++)
{
//some code
//add delay here
}
那么我该怎么做呢?
我正在使用 C# 开发 ASP.NET MVC3。我想在 for 循环的每次迭代之间添加一些延迟。
for(int i=0; i<5; i++)
{
//some code
//add delay here
}
那么我该怎么做呢?
正如其他答案所说,使用Thread.Sleep
会使线程休眠......但鉴于您正在编写一个网络应用程序,我认为它不会按照您的意愿行事。
如果目标是让用户一次看到一秒钟发生的事情,那么您需要将延迟放在客户端。如果您在发送 HTTP 响应之前有五个一秒延迟,这仅意味着用户必须等待五秒才能看到您的结果页面。
听起来您应该使用 AJAX 来执行此操作。
编辑:如评论中所述,可能值得您查看window.setTimeout
Javascript 调用。(我不“做” Javascript,所以恐怕我无法帮助解决这方面的任何细节。)
最简单的方法是让当前线程休眠。
System.Threading.Thread.Sleep (200);
但请记住,Web 应用程序中的线程是非常宝贵的资源,将线程置于睡眠状态仍然会使线程保持忙碌状态。
通常没有充分的理由在 Web 应用程序中这样做。
无论问题需要你这样做,都可以以更好的方式解决。
已经描述的另一种方法可能是反应式扩展(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
在特定时间戳生成一系列值。
您可以使用Thread.Sleep();
int milliseconds = 5000;
Thread.Sleep(milliseconds);
这会使当前线程的执行停止 5 秒。