Estoy buscando un intento de propósito general y reintentar con un tiempo de espera en C#. Básicamente, quiero lo siguiente:Propósito general ¿Intentar y volver a intentar con un tiempo de espera en C#?
bool stopTrying = false;
DateTime time = DateTime.Now;
while (!stopTrying)
{
try
{
//[Statement to Execute]
}
catch (Exception ex)
{
if (DateTime.Now.Subtract(time).Milliseconds > 10000)
{
stopTrying = true;
throw ex;
}
}
}
En el caso anterior, estoy esperando durante 10 segundos, pero debe ser un tiempo de espera variable en función de un parámetro. No quiero tener que repetir este código completo donde sea que necesite usarlo. Hay varios lugares en mi código en los que no se ha agotado el tiempo de espera integrado en la API, y haré clic en una excepción si la aplicación no está lista para la ejecución de la declaración. Esto también evitaría tener que codificar retrasos en mi aplicación antes de este satement.
Aclaración: La afirmación en cuestión podría ser algo así como una tarea. Si utilizo un delegado y un método. Invoque, ¿no está la invocación dentro del delegado y no el método original?
Utilice 'tiro ; 'volver a lanzar excepciones, no' tirar ex; 'ya que este último destruye el stac k trace. – Will
@Will, utilicé el código OP. Tienes razón, sin embargo; 'throw' debe usarse solo. Actualizaré mi respuesta para reflejar esto. – strager
Falta un stopTrying = true; después de llamar a "method.Invoke()"; –