C#中For循环的延时如何在循环一定轮换后使用延时?假设:for(inti=0;i<64;i++){...................}我希望每旋转8次后延迟1秒。有很多方法可以做到这一点:这是一件可怕的事情;操作系统会假设你在做有用的工作,并且会专门用一个CPU来做任何事情,除了旋转。除非您知道旋转只会持续几微秒,否则永远不要这样做。基本上,当您这样做时,您会雇人为您看表;那不经济。线程休眠也是一件可怕的事情,但没有让CPU变热那么可怕。一个休眠线程告诉操作系统“这个应用程序的这个线程应该暂时停止响应事件并且什么都不做”。这比雇人帮你看钟要好;现在你正在雇人为你睡觉。这是对资源的有效利用;现在你雇人煮鸡蛋,鸡蛋在煮的时候,他们可以烤面包。然而,编写将工作分解为小任务的程序是一件痛苦的事情。这样做的缺点当然是C#5目前仅处于测试阶段。注意:自VisualStudio2012起,正在使用C#5。如果您使用的是VS2012或更高版本,则可以使用异步编程。如果你想在每8次迭代后休眠,试试这个:for(inti=0;iuseThread.Sleep(fromSystem.Threading):for(inti=0;i<64;i++){if(i%8==0)Thread.Sleep(1000);}您可能还想研究使用Timer而不是在循环中暂停当前线程。它允许您在一段时间后执行一些代码块(重复或不)。没有更多的背景信息,很难判断这是否最适合您的情况,或者您将如何相应地更改您的解决方案。这是我建议的实现。它是通用的,因此您可以轻松地将其重用于您的用例。(它与@Servy建议的一致)publicstaticasyncTaskForEachWithDelay(thisICollectionitems,Funcaction,doubleinterval){using(vartimer=newSystem.Timers.Timer(interval)){vartask=newTask(()=>{});intremaining=items.Count;varqueue=newConcurrentQueue(items);timer.Elapsed+=async(sender,args)=>{Titem;if(queue.TryDequeue(outitem)){try{awaitaction(item);}finally{//完成任务。剩余-=1;if(remaining==0){//没有更多的项目要处理。完成任务。任务.开始();}}}};定时器。开始();等待任务;}}然后使用它:varnumbers=Enumerable.Range(1,10).ToList();变种间隔=1000;//1000毫秒延迟numbers.ForEachWithDelay(i=>Task.Run(()=>Console.WriteLine(i+"@"+DateTime.Now)),interval);打印这个:1@2/2/20169:45:37AM2@2/2/20169:45:38AM3@2/2/20169:45:39AM4@2/2/20169:45:40AM5@2/2/20169:45:41AM6@2/2/20169:45:42AM7@2/2/20169:45:43AM8@2/2/2016年9点45分44秒上午9@2/2/20169:45:45AM10@2/2/20169:45:46AM尝试这个不依赖于async或await或TPL的更简单版本Spawns50方法调用,休眠20秒,检查20或x项目是否完整。ifnomoresleep20secondsifyes在此处恢复循环代码taskorTask.Run()以上就是C#学习教程的全部内容:c#中For循环的延时,如果对你有用,需要进一步了解C#学习教程,希望你将分享Follow---functionDoWork()//Doworkinasepthread.cnt--;)本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
