Ho un TcpClient che uso per inviare dati a un listener su un computer remoto. Il computer remoto a volte si accende e talvolta si spegne. Per questo motivo, TcpClient non riesce a connettersi spesso. Voglio che il TcpClient scada dopo un secondo, quindi non ci vuole molto tempo quando non riesce a connettersi al computer remoto. Attualmente, utilizzo questo codice per TcpClient:Come impostare il timeout per un TcpClient?
try
{
TcpClient client = new TcpClient("remotehost", this.Port);
client.SendTimeout = 1000;
Byte[] data = System.Text.Encoding.Unicode.GetBytes(this.Message);
NetworkStream stream = client.GetStream();
stream.Write(data, 0, data.Length);
data = new Byte[512];
Int32 bytes = stream.Read(data, 0, data.Length);
this.Response = System.Text.Encoding.Unicode.GetString(data, 0, bytes);
stream.Close();
client.Close();
FireSentEvent(); //Notifies of success
}
catch (Exception ex)
{
FireFailedEvent(ex); //Notifies of failure
}
Questo funziona abbastanza bene per la gestione del compito. Lo invia se possibile e rileva l'eccezione se non riesce a connettersi al computer remoto. Tuttavia, quando non riesce a connettersi, occorrono da dieci a quindici secondi per generare un'eccezione. Ho bisogno che scada tra un secondo circa? Come cambierei il time out?
qual è il punto di usare asincrono collegano, e "sincronizzare" indietro con aspettare? Voglio dire, al momento sto cercando di capire come implementare il timeout con lettura asincrona, ma la soluzione non disabilita completamente la progettazione asincrona. dovrebbe utilizzare timeout di socket o token di cancellazione o qualcosa del genere. altrimenti, usa solo connetti/leggi invece ... – RoeeK
@RoeeK: Il punto è quello che dice la domanda: selezionare a livello di programmazione un timeout arbitrario per il tentativo di connessione. Questo non è un esempio su come fare un IO asincrono. – Jon
@RoeeK: Il punto fondamentale di questa domanda è che 'TcpClient' non offre una funzione di sincronizzazione con un timeout configurabile, che è una delle soluzioni proposte. Questa è una soluzione alternativa per abilitarlo. Non sono sicuro di cos'altro dire senza ripetermi. – Jon