Le operazioni di rete asincrone non finiscono mai

Ho diverse operazioni di rete asincrona che restituiscono un’attività che potrebbe non finire mai:

  1. UdpClient.ReceiveAsync non accetta un CancellationToken
  2. TcpClient.GetStream restituisce un NetworkStream che non rispetta il CancellationToken su Stream.ReadAsync (verifica dell’annullamento solo all’inizio dell’operazione)

Entrambi aspettano un messaggio che potrebbe non arrivare mai (a causa della perdita di pacchetti o di nessuna risposta, ad esempio). Ciò significa che ho compiti fantasma che non si completano mai, continuazioni che non funzioneranno mai e utilizzeranno le prese in attesa. So che posso usare TimeoutAfter , ma questo risolverà solo il problema di continuazione.

Quindi cosa dovrei fare?