web-dev-qa-db-fra.com

Comment obtenir Thread.Sleep?

J'écris une application liée au réseau basée sur le paradigme attente/sommeil.

Parfois, des erreurs de connexion se produisent et, selon mon expérience, il est avantageux d'attendre un certain temps, puis de relancer l'opération.

Le problème est que si j'utilise Thread.Sleep ou une autre opération de blocage similaire dans wait/async, cela bloque toute activité dans le thread appelant.

Que dois-je remplacer par Thread.Sleep (10000) pour obtenir le même effet que

await Thread.SleepAsync(10000)

?

MISE À JOUR

Je préférerai une réponse qui le fasse sans créer de fil supplémentaire

114
Arsen Zahray

Les autres réponses suggérant de démarrer un nouveau fil sont une mauvaise idée - inutile de le faire. Une partie du point de async/await consiste à réduire le nombre de threads nécessaires à votre application.

Vous devriez plutôt utiliser Task.Delay qui ne nécessite pas un nouveau thread, et a été conçu précisément pour cela:

// Execution of the async method will continue one second later, but without
// blocking.
await Task.Delay(1000);
269
Jon Skeet