BeginReceive/BeginRead超时

Bar*_*arg 15 asynchronous networkstream tcpclient beginread beginreceive

我正在使用NetworkStream和TcpClient使用BeginRead异步接收数据.我需要对此操作应用超时,以便在指定的时间后读取将被中止.

据我所知,NetworkStream或TcpClient不支持 - 有一个ReceiveTimeout属性,但这似乎只适用于同步等效 - 'Read'.

甚至底层的Socket类似乎也不支持其BeginReceive方法中的超时.

我已经搜索过这个问题,我看到的唯一建议的解决方案是设置另一个后台线程来取消操作,如果它在超时期限内没有完成.这看起来像是一个可怕的黑客.当然有更好的方法吗?

Joe*_*l C 2

这是执行此操作的唯一方法,因为当您使用异步操作时,启动该操作的线程将停止执行其他操作。同步版本可以使用超时,因为执行线程会被阻塞,直到读取操作完成。

但是,如果您必须使用后台线程来取消操作,则继续使用异步 Begin/End 方法就没有多大意义。如果要分离后台线程,只需从后台线程执行同步读取操作,然后就可以使用 ReceiveTimeout。