Al momento sono in giro con clienti e server in C # winform e sto provando a implementarlo in modo asincrono. Tuttavia, sto cominciando a chiedermi, dovrei usare il codice asincrono per tutto?
Ecco un elenco di ciò che sto facendo in modo asincrono al momento:
-
TcpClient.BeginConnect con TcpClient.EndConnect
-
NetworkStream.BeginRead with NetworkStream.EndRead
-
TcpListener.BeginAcceptTcpClient con TcpListener.EndAcceptTcpClient
-
Ascolto del thread sul server per le connessioni client
-
Ascolto del thread sul client per i dati in arrivo dal server
-
Attività di ascolto sul server per i dati in arrivo da ciascun client
-
Nuova attività creata ogni volta che viene sollevato un evento come ConnectionLost (quindi il modulo corrispondente può essere aggiornato). Pensa a Delegate.BeginInvoke.
Tutto è configurato in modo asincrono e funziona bene, ma sto cominciando a chiedermi se tutti questi dovrebbero essere asincroni. Voglio dire, suona tutto bene e la gente afferma che sia efficiente a causa delle porte di completamento dell'IO che non bloccano o qualcosa del genere, ma è davvero?
Posso capire di avere un singolo thread per ascoltare sia sul client che sul server, e anche per leggerlo ha senso. Ma ogni volta che viene sollevato un evento (che può essere abbastanza spesso!), La sua invocazione dovrebbe essere davvero asincrona? Sembra che sto utilizzando Attività per tutto ciò che può essere reso asincrono e non sono sicuro che sia la migliore pratica.