我有一个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(),因为它会不必要地减慢我的应用程序,并且当此线程上没有收到数据时仍然希望其他线程处理。
答案 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
}
}
然后只需调用它,它将在后台运行无限。让它将结果传递给某个队列,然后您可以随意使用这些结果,将数据出列到列表中并随意执行任何操作。