我正在写一个异步读取回调函数和我学习C#的时刻想问如果下面是递归的(这不是我的,但我的将是类似的构造):我的异步I/O回调函数是否递归?
protected void ReadCompleted(IAsyncResult iResult)
{
byte[] byIn = (byte[])iResult.AsyncState;
try
{
File.EndRead(iResult);
try
{
HandleDataReceived(byIn);
}
finally
{
BeginAsyncRead(); //recursion??
}
}
catch (IOException ioexc)
{
// Device has been removed!
}
}
现在我不是特别反对递归,但是当写一些具有巨大内存消耗潜力的东西时,我想避免它。 这个整个函数本身在BeginAsync()中被调用。
嗯,我想,因为这个函数是从BeginAsyncRead中调用的,另一个调用是放在这里BeginAsyncRead。我想这可能会创建BeginAsyncRead函数的另一个实例。 – 2009-12-11 02:01:41
在这种情况下,是的,但这些类型的递归调用:f1 - > f2 - > f3 - > f4 - > f1是很难理解和调试的,我建议不惜一切代价避免它们。 – Michael 2009-12-11 17:47:41