C#中的无限While循环,CPU使用率100%

C#中的无限While循环,CPU使用率100%,c#,while-loop,cpu-usage,C#,While Loop,Cpu Usage,我有一个间歇产生数据的web响应流。无法知道此通道何时接收数据 为了读取应用程序中的所有数据,我使用了while(true),这将导致100%的CPU使用率 我不能使用ManualResetEvent,因为应用程序必须一直从流中读取数据。只要接收到数据,这就可以正常工作,但当流中没有数据时,其他线程就无法获得足够的CPU时间来处理。 我的代码如下所示:- StreamReader streamReader = new StreamReader(httpResponse.GetResponseSt

我有一个间歇产生数据的web响应流。无法知道此通道何时接收数据

为了读取应用程序中的所有数据,我使用了while(true),这将导致100%的CPU使用率

我不能使用ManualResetEvent,因为应用程序必须一直从流中读取数据。只要接收到数据,这就可以正常工作,但当流中没有数据时,其他线程就无法获得足够的CPU时间来处理。 我的代码如下所示:-

StreamReader streamReader = new StreamReader(httpResponse.GetResponseStream());
while(true)
{
    int charvalue = streamReader.Read();
    // More code to process data read above
}

我不想使用Thread.Sleep(),因为它会不必要地减慢我的应用程序的速度,并且在该线程上没有接收到数据时仍希望其他线程进行处理。

创建一个异步方法,并使用wait Task.Delay()执行此操作


然后调用它,它将在后台运行。让它将您的结果传递到某个队列,然后您就可以随意使用这些结果,将数据排到列表中,并对其执行任何您想要的操作。

它是否会阻止
读取
?您需要有
以外的条件,而(true)
,否则它将永远持续下去。我猜你的循环中也没有一个
break
?好吧,thread.Sleep()是答案,它只会休眠你当前的线程,是的,如果你没有要读取的数据,只需休眠一段时间,然后再次检查(charvalue=-1)break
Read()
应该一直阻止,直到下一个字符可用为止,除非到达流的末尾,在这种情况下,它确实会返回
-1
,而不会阻塞。但如果流已经结束,它无论如何都不能“恢复”,所以只需检查
-1
并中断循环即可。
public async void ReadFromStream(StreamReader streamReader)
{
 while(true)
 {
    int charvalue = streamReader.Read();
    await Task.Delay(1000);
    // add this data to some list, queue or something else so you could use it somewhere else easily and then just use this data in your other methods

 }
}