我正在使用NetworkStream和TcpClient通过BeginRead异步接收数据。我需要对此操作应用超时,以便在指定时间后中止读取。
据我所知,NetworkStream或TcpClient不支持这种方式-有一个ReceiveTimeout属性,但似乎只适用于同步等效的“读取”。
即使是底层的Socket类在其BeginReceive方法中也不支持超时。
我已经搜索了这个问题,并且唯一建议的解决方法是设置另一个后台线程来取消操作,如果它在超时期限内未完成。这似乎是一种可怕的方法。肯定有更好的方法吧?
据我所知,NetworkStream或TcpClient不支持这种方式-有一个ReceiveTimeout属性,但似乎只适用于同步等效的“读取”。
即使是底层的Socket类在其BeginReceive方法中也不支持超时。
我已经搜索了这个问题,并且唯一建议的解决方法是设置另一个后台线程来取消操作,如果它在超时期限内未完成。这似乎是一种可怕的方法。肯定有更好的方法吧?
System.Threading.Timer
,它不会占用线程。 - hangarTimer
有4个实现方式,System.Threading.Timer
使用了一个线程,但它在线程池上运行,因此您无需手动管理必要的资源来使计时器函数正常工作。请参见 https://learn.microsoft.com/zh-cn/dotnet/api/system.timers.timer?view=netcore-3.1 - Kieran Devlin