Come parte di un processo di automazione di grandi dimensioni, stiamo chiamando un'API di terze parti che esegue alcuni servizi di chiamata di lavoro su un'altra macchina. Recentemente abbiamo scoperto che ogni tanto quando l'altra macchina non è disponibile, la chiamata API verrà eseguita a volte fino a 40 minuti durante il tentativo di connessione al server remoto.Un uso ragionevole del threading in C#?
L'API che stiamo utilizzando non offre un modo per specificare un timeout e non vogliamo che il nostro programma sia in attesa da così tanto tempo, quindi ho pensato che i thread sarebbero stati un buon modo per forzare il timeout. Il codice risultante è qualcosa di simile:
Thread _thread = new Thread(_caller.CallServices());
_thread.Start();
_thread.Join(timeout);
if (_thread.IsAlive)
{
_thread.Abort();
throw new Exception("Timed-out attempting to connect.");
}
Fondamentalmente, voglio lasciare apicall run(), ma se si è ancora in corso dopo il timeout è trascorso, scontato che sta per fallire, ucciderlo e andare avanti.
Dal momento che sono nuovi per la filettatura in C# e il runtime .NET ho pensato di chiedere due questioni correlate:
c'è una migliore/meccanismo più appropriato nelle librerie .NET per quello che ho' sto cercando di fare e ho commesso qualche thread di threading in quel pezzetto di codice?
Come si gestisce il timeout? Lasciate che il componente continui a provare, per un massimo di 40 minuti, a connettersi al server mancante? Penso che la domanda riguardasse come impedire al componente di provare a connettersi. – Cybis
Siamo spiacenti, è stato modificato per aggiungere codice di esempio ... la domanda di timeout è indirizzata da DateTime.Ora