C# NetworkStream ReadAsync取消
我正在尝试从C# NetworkStream ReadAsync取消,c#,sockets,asynchronous,networkstream,cancellation,C#,Sockets,Asynchronous,Networkstream,Cancellation,我正在尝试从NetworkStream为ReadAsync方法添加一个“超时” 我想在特定时间后取消ReadAsync 例如: ctsTimeout.CancelAfter(10); int bytesRead = await nsStream.ReadAsync(newArr, 0, newArr.Length, ctsTimeout.Token); 但该方法仍在等待服务器的响应 是否可以在读取状态下取消此方法?NetworkStream(或继承Stream)实际上不支持取消。ReadAs
NetworkStream
为ReadAsync
方法添加一个“超时”
我想在特定时间后取消ReadAsync
例如:
ctsTimeout.CancelAfter(10);
int bytesRead = await nsStream.ReadAsync(newArr, 0, newArr.Length, ctsTimeout.Token);
但该方法仍在等待服务器的响应
是否可以在读取状态下取消此方法?
NetworkStream
(或继承Stream
)实际上不支持取消。ReadAsync
方法接受取消令牌,确定;但这实际上只是让你知道在阅读完成之前是否有人要求取消。ReadAsync
实际上只是包装了BeginRead
和EndRead
——它们无法取消读取操作
要真正取消读取,您需要处理或关闭
NetworkStream
对象。这方面的主要问题是ReadAsync或WriteAsync完成后的清理。如果过早处置包含读/写缓冲区的类,可能会发生非法操作。不要处理该类,否则可能会导致内存泄漏。我通过使用ContinueWith(()=>classthattholdshebuffer.Dispose())将Dispose()添加到读/写任务中,解决了这个问题。