J'écris une application liée au réseau basée sur le paradigme d'attente / sommeil.
Parfois, des erreurs de connexion se produisent, et d'après mon expérience, il vaut la peine d'attendre un certain temps, puis de réessayer l'opération.
Le problème est que si j'utilise Thread.Sleep ou une autre opération de blocage similaire dans await / async, cela bloque toute activité dans le thread de l'appelant.
Par quoi dois-je remplacer Thread.Sleep (10000) pour obtenir le même effet que
await Thread.SleepAsync(10000)
?
METTRE À JOUR
Je préférerai une réponse qui fait cela sans créer de fil supplémentaire
la source
async
intro utile. Lorsque l'attendable retourné parTask.Delay
estawait
ed, puisqu'il n'est pas complet, la méthode courante renvoie une tâche incomplète. Plus tard, lorsque le seDelay
termine (hors d'une minuterie, pas d'un thread), le reste de la méthode est planifié pour s'exécuter. La suite se déroule dans un "contexte" qui peut revenir au même fil d'origine - détails sur mon blog.await
est planifié (éventuellement).