我想以异步方式从套接字读取。当没有数据从套接字可用时的异步编程模型
如果我使用的同步代码下面
StreamReader aReadStream = new StreamReader(aStream); String aLine = aReadStream.ReadLine(); // application might hand here
与有效的打开连接,但没有可用于读取数据,应用程序将在的ReadLine()函数挂起。
如果我切换到下面的代码使用异步编程模型
NetworkStream aStream = aClient.GetStream(); while(true) { IAsyncResult res = aStream.BeginRead(data, 0, data.Length, null, null); if (res.IsCompleted){ Trace.WriteLine("here"); } else { Thread.Sleep(100); } }
在相同的情况下,会发生什么?如果没有要读取的数据,变量res
将显示为Completed
或不显示?
最重要的是,当没有要读取的数据时,我在while循环中的所有呼叫到aStream.BeginRead()
都在线程池中连续调度?如果这是真的,我冒着降低应用程序性能的风险,因为线程池增加了太多的大小?
感谢您的帮助
AFG