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

时间:2017-12-11 12:48:43

标签: c# while-loop cpu-usage

我有一个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(),因为它会不必要地减慢我的应用程序,并且当此线程上没有收到数据时仍然希望其他线程处理。

1 个答案:

答案 0 :(得分:0)

创建一个异步方法并使用等待Task.Delay()

来完成
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

 }
}

然后只需调用它,它将在后台运行无限。让它将结果传递给某个队列,然后您可以随意使用这些结果,将数据出列到列表中并随意执行任何操作。