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

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

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

那我怎么能这样做?

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

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

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

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

最简单的方法是将当前线程置于hibernate状态。

 System.Threading.Thread.Sleep (200); 

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

通常没有充分的理由在Web应用程序中执行此操作。
无论您需要做什么问题,都可以以更好的方式解决

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

你可以使用Thread.Sleep();

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

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

怎么样的

 System.Threading.Thread.Sleep(1000); 

Thread.Sleep方法(Int32)

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

 System.Threading.Thread.Sleep (1000); 

虽然确保这只是为了调试目的。 比故意放慢软件速度更令人讨厌。

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