如何优雅地停止在断开连接上读取流?

时间:2017-12-26 22:19:11

标签: c# sockets asynchronous

我有一个简单的套接字连接,它在异步中运行读取任务。当我断开连接时,我得到一个例外:

  

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,但我觉得可能有一种更优雅的方式,而不仅仅是允许它抛出无声异常?

0 个答案:

没有答案