Comment append un délai entre chaque itération de for boucle en C #?

Je travaille sur ASP.NET MVC3 avec C #. Je veux append un peu de retard entre chaque itération de for boucle.

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

Alors, comment puis-je faire cela?

Comme d’autres réponses l’ont déjà dit, utiliser Thread.Sleep va Thread.Sleep un fil de discussion … mais vu que vous écrivez une application Web, je ne pense pas que cela fera ce que vous voulez.

Si l’objective est que les utilisateurs voient les choses se dérouler une seconde à la fois, vous devrez reporter le délai sur le client. Si vous disposez d’un délai de cinq secondes avant d’envoyer une réponse HTTP, cela signifie simplement que l’utilisateur devra attendre cinq secondes avant de voir votre page de résultats.

On dirait que vous devriez le faire avec AJAX.

EDIT: Comme indiqué dans les commentaires, cela vaut probablement la peine de regarder l’appel Javascript window.setTimeout . (Je ne “fais” pas le Javascript, alors j’ai bien peur de ne pouvoir vous aider avec aucun détail à ce sujet.)

Le moyen le plus simple est de mettre le thread actuel en veille.

 System.Threading.Thread.Sleep (200); 

Rappelez-vous cependant que les threads dans une application Web sont des ressources très précieuses, et le laisser en veille garde toujours le thread occupé.

Il n’y a généralement pas de bonne raison de faire cela dans une application Web.
Quel que soit le problème nécessitant votre intervention, il peut être résolu mieux .

Une autre approche que celles déjà décrites peut être les extensions réactives (Rx) . Certaines méthodes génèrent des séquences de valeurs dans le temps. Dans votre cas, vous pouvez utiliser le code suivant.

 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(); 

L’appel de la IObservable à effectuer vous permet d’attendre que IObservable terminé. Si vous n’en avez pas besoin, vous pouvez simplement l’omettre. Observable.Generate génère une séquence de valeurs à des horodatages spécifiques.

vous pouvez utiliser Thread.Sleep();

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

cela arrête l’exécution du thread en cours pendant 5 secondes.

Que diriez-vous de quelque chose comme

 System.Threading.Thread.Sleep(1000); 

Méthode Thread.Sleep (Int32)

Vous pouvez utiliser quelque chose comme un délai d’une seconde:

 System.Threading.Thread.Sleep (1000); 

mais assurez-vous que ce n’est qu’à des fins de débogage. Il n’ya guère plus gênant que de ralentir intentionnellement un logiciel.

Autre moyen facile d’apporter des améliorations de performances plus tard, bien sûr 🙂