可能重复:
Difference between NetworkStream.Read() and NetworkStream.BeginRead()?
稍微弄乱TcpClient类,我注意到TcpClient.GetStream()类同时具有Read()
和BeginRead() and EndRead()
函数。
我应该使用以下哪些?我意识到Begin和End函数是异步函数但我应该使用它们吗?在什么情况下我会使用Read与其异步对应?怎么样写?
目前我正在做这样的事情:
byte[] message = new byte[4096];
int bytesRead = clientStream.Read(message, 0, 4096);
我应该使用BeginRead和EndRead吗?
答案 0 :(得分:3)
同步和异步方法之间的选择本质上是应用程序的线程模型的选择。因为对于大多数应用程序而言,当用户执行其他任务(例如访问网络,如同所讨论的情况)时对用户没有响应是不可接受的,您需要提供一种在工作完成时响应用户输入的方法
两种最常见的选择是
选择例如Read
和BeginRead
对应于上面选项1和2之间的选择(我假设如果使用阻塞方法,例如Read
,则需要在不同于您的线程的线程上执行此操作UI运行,因此从技术上讲,没有必要,在实践中使用阻塞调用的应用程序将是多线程的。
如果您不完全理解我所说的内容,请使用同步调用,因为它会更容易。如果您的申请开始无响应,您将有机会在以后重新考虑您的方法。