如何在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);
虽然确保这只是为了调试目的。 比故意放慢软件速度更令人讨厌。
除了稍后介绍性能改进的简单方法,当然:-)