【发布时间】:2018-07-11 14:06:56
【问题描述】:
我有一个名为 TCPStream 的课程。它继承NetworkStream 类。
而NetworkStream继承Stream类即,
public class TCPStream : NetworkStream, IComparable<TCPStream>
{...}
和
public class NetworkStream : Stream
{...}
现在,Stream 类有一个函数 ReadAsync(,,,),并且该函数也在 TCPStream 类中被覆盖。
我的问题是:当我在 TCPStream 类中调用 base.ReadAsync(,,,) 时,它会一次又一次地执行自身...(不调用(父)Stream 类方法...)
因此,StackOverFlowException 是由于自调用而发生的..
我应该怎么做才能完成这项任务? 代码片段如下
public override Task<int> ReadAsync(byte[] buffer, int offset, int count, CancellationToken cancellationToken)
{
try
{
// int read_RetryCount = 0;
// repeat till Complete Packet Received
TimeSpan timeOutLimit = TimeSpan.MaxValue;
if (CanTimeout)
timeOutLimit = DateTime.Now.TimeOfDay + TimeSpan.FromMilliseconds(ReadTimeout); // maxTimeOutLimit
**// *** Here is Problem, base.ReadAsync(,,,) Not execute Parent's ReasAsync(,,,)***
// *** After This Line, Function Execute itself Again..*****
var length = base.ReadAsync(_localBuffer.Array, _localBuffer.Offset, _localBuffer.Count ).GetAwaiter().GetResult();
Console.WriteLine("Total Bytes read = " + length);
}
}
【问题讨论】:
-
请不要使用不相关的标签发送垃圾邮件。对于未来的问题,请花一些时间阅读the help pages,尤其是"What topics can I ask about here?" 和"What types of questions should I avoid asking?"。也请take the tour 和read about how to ask good questions。最后请学习如何创建Minimal, Complete, and Verifiable Example。
-
如果没有覆盖方法的代码,就不可能猜出你的问题是什么。所以请出示
TCPStream.ReadAsync的coe。 -
如果你在一个类中有一个方法要调用父类中的方法,那么你必须明确声明
base.Method()。如果该方法在您的子类中被覆盖并且您有一个子类的实例,那么该方法将始终被调用 - 这就是覆盖的意思。 -
@HimBromBeere 由于
Stream类的复杂性,我希望看到的不仅仅是那个方法...... -
@HimBromBeere 我已经更新了我的帖子,添加了代码 sn-ps.. 请查看
标签: c# stream networkstream