Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# NetworkStream ReadAsync取消_C#_Sockets_Asynchronous_Networkstream_Cancellation - Fatal编程技术网

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()添加到读/写任务中,解决了这个问题。