¿Cómo conseguir Thread.Sleep esperado?
Estoy escribiendo una aplicación vinculada a la red basada en el paradigma de espera/suspensión.
A veces, ocurren errores de conexión y, en mi experiencia, vale la pena esperar un tiempo y luego volver a intentar la operación.
El problema es que si uso Thread.Sleep u otra operación de bloqueo similar en await/async, bloquea toda la actividad en el hilo de la persona que llama.
¿Con qué debo reemplazar Thread.Sleep(10000) para lograr el mismo efecto que?
await Thread.SleepAsync(10000)
?
ACTUALIZAR
Preferiré una respuesta que haga esto sin crear ningún hilo adicional.
Las otras respuestas que sugieren iniciar un nuevo hilo son una mala idea; no es necesario hacerlo en absoluto. Parte del objetivo de async
/ await
es reducir la cantidad de subprocesos que necesita su aplicación.
En su lugar, deberías usar Task.Delay
el que no requiere un hilo nuevo y que fue diseñado precisamente para este propósito:
// Execution of the async method will continue one second later, but without
// blocking.
await Task.Delay(1000);
Esta solución también tiene la ventaja de permitir la cancelación , si se proporciona un token de cancelación. Ejemplo:
public async Task DoWork(CancellationToken token)
{
await Task.Delay(1000, token);
}