Como parte de un gran proceso de automatización, estamos llamando a una API de terceros que realiza algunos servicios de llamadas de trabajo en otra máquina. Descubrimos recientemente que cada cierto tiempo, cuando la otra máquina no está disponible, la llamada API se desvía a veces hasta 40 minutos al intentar conectarse al servidor remoto.¿Un uso razonable de enhebrar en C#?
La API que estamos utilizando no ofrece una manera de especificar un tiempo de espera y no queremos que nuestro programa espere tanto tiempo, así que pensé que los hilos serían una buena forma de aplicar el tiempo de espera. El código resultante se ve algo como:
Thread _thread = new Thread(_caller.CallServices());
_thread.Start();
_thread.Join(timeout);
if (_thread.IsAlive)
{
_thread.Abort();
throw new Exception("Timed-out attempting to connect.");
}
Básicamente, quiero que APICall run(), pero si todavía se va después de que haya transcurrido el tiempo de espera, asuma que va a fracasar, matarlo y seguir adelante.
Ya que soy nuevo en el roscado en C# y en el tiempo de ejecución de .NET que pensé en dos preguntas relacionadas:
¿Existe un mecanismo mejor/más apropiado en las bibliotecas de .NET para lo que yo' Estoy tratando de hacer, y he cometido algún truco threading en ese pedazo de código?
¿Cómo manejas el tiempo de espera? ¿Simplemente dejas que el componente siga intentándolo durante hasta 40 minutos para conectarte al servidor que falta? Creo que la pregunta era cómo hacer que el componente deje de intentar conectarse. – Cybis
Lo sentimos, fue la edición para agregar el código de muestra ... la fecha límite de espera es tratada por DateTime.Now