我编写了以下方法来从流中读取数据。在我的计算机上,它将是MemoryStream,而在现实世界中,它将是网络流。

    public async void ReadAsync()
    {
        byte[] data = new byte[1024];
        int numBytesRead = await _stream.ReadAsync(data, 0, 1024);

        // Process data ...

        // Read again.
        ReadAsync();
    }


这里的想法是在回调中处理数据,然后回调应产生一个新的读取器线程(并杀死旧线程)。
但是,这不会发生。我得到一个StackOverflowException。

我究竟做错了什么?

最佳答案

您有一个永无止境的recursion

您将永远调用ReadAsync(),并且永远不会从方法中返回(因此会破坏无限递归)。

可能的解决方案是:

public async void ReadAsync()
{
    byte[] data = new byte[1024];
    int numBytesRead = await _stream.ReadAsync(data, 0, 1024);

    // Process data ...

    // Read again.
    if(numBytesRead > 0)
    {
        ReadAsync();
    }
}


要更好地理解递归,请使用check this

关于c# - 流读取与异步等待,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12264946/

10-17 01:07