我编写了以下方法来从流中读取数据。在我的计算机上,它将是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/