从C#Stream读取而不必等待

从C#Stream读取而不必等待,c#,stream,busy-waiting,busy-loop,C#,Stream,Busy Waiting,Busy Loop,我需要从C#流中读取内容。我不知道那是哪种溪流。让我们假设它是网络流,并且网络非常慢。所以我不能立即读取所有字节。我知道流中的4个字节是整数,这个整数定义了我们需要从流中获取的内容长度。如何在不忙着等待(循环)的情况下完成 private(int-headerValue,bool-issucess)ReadHeader() { var bytesRead=0; var headerBuffer=新字节[BufferHeaderLength]; var headerIsReady=假; 而(!he

我需要从C#流中读取内容。我不知道那是哪种溪流。让我们假设它是网络流,并且网络非常慢。所以我不能立即读取所有字节。我知道流中的4个字节是整数,这个整数定义了我们需要从流中获取的内容长度。如何在不忙着等待(循环)的情况下完成

private(int-headerValue,bool-issucess)ReadHeader()
{
var bytesRead=0;
var headerBuffer=新字节[BufferHeaderLength];
var headerIsReady=假;
而(!headerIsReady)
{
尝试
{
var availableBytesToRead=Math.Min(BufferHeaderLength-bytesRead,underyingstream.Length);//应该是0到4之间的数字
bytesRead+=underyingstream.Read(headerBuffer,bytesRead,(int)availableBytesToRead);
如果(字节读==0)
{
打破
}
}
捕获(例外)
{
打破
}
headerIsReady=bytesRead==BufferHeaderLength;
}
var headerValue=headerIsReady?位转换器.ToInt32(headerBuffer,0):0;
返回值(headerValue,headerisrady);
}

如果您知道它将是一个网络流或类似的流,那么它有相应的设施。如果你不知道它是什么类型的流,你将不得不轮询它的数据。可能是要调查的事情。。。但它不会消除循环的需要(这与“忙等待”的必要性不同)