我有一个简单的套接字连接,它在异步中运行读取任务。当我断开连接时,我得到一个例外:
System.ObjectDisposedException:无法访问已处置的对象。 对象名称:'SslStream'。
当我呼叫断开连接时,我不知道如何阻止它在坐着时等待阅读消息。这是我的阅读代码:
VLOOKUPS
这是我的断开代码:
public async Task<int> Read(byte[] readBuffer)
{
if (!IsConnected)
{
return 0;
}
try
{
await Stream.ReadAsync(_header, 0, _header.Length);
return await Stream.ReadAsync(readBuffer, 0, _header[0]);
}
catch (Exception e)
{
Debug.Log(e);
Disconnect();
return 0;
}
}
protected async Task _RunReader()
{
var totalBytes = await Read(_readBuffer);
if (totalBytes > 0)
{
HandleReader(_readBuffer, totalBytes);
_RunReader();
}
}
在调用 public async Task Disconnect(bool graceful = false)
{
if (IsConnected && graceful)
{
lockPackets = true;
Empty[0] = 1; // send disconnect message to server for graceful
await Send(Empty,1);
}
Stream?.Close();
TcpClient.Close();
IsConnected = false;
}
时是否有办法放弃ReadAsync
以避免异常?它不会影响程序,因为我Disconnect
,但我觉得可能有一种更优雅的方式,而不仅仅是允许它抛出无声异常?