在处理TcpClients时,何时使用async

本文关键字:何时使 async 处理 TcpClients | 更新日期: 2023-09-27 18:09:07

可能重复:
NetworkStream.Read((和NetworkStream.BeginRead((之间的区别?

与TcpClient类有点冲突,我注意到TcpClient.GetStream((类同时具有Read()BeginRead() and EndRead()函数。

这些我应该用哪一个?我知道Begin和End函数是异步函数,但我应该使用它们吗?在什么情况下,我会使用Read而不是异步?Write怎么样?

目前我正在做这样的事情:

byte[] message = new byte[4096];
int bytesRead = clientStream.Read(message, 0, 4096);

我应该使用BeginRead和EndRead吗?

在处理TcpClients时,何时使用async

同步和异步方法之间的选择本质上是应用程序线程模型的选择。由于对于大多数应用程序来说,在用户执行其他任务(例如访问网络,这是有问题的情况(时对用户没有响应是不可接受的,因此您需要提供一种在完成工作时对用户输入做出响应的方式。

两种最广泛的选择是

  1. 使应用程序成为多线程的,有效地允许它同时做多件事
  2. 使用异步回调并处理小块中的工作,同时在处理这些块之间响应用户

例如,ReadBeginRead之间的选择对应于上述选项1和2之间的选择(我认为,如果使用Read之类的阻塞方法,则需要在与UI运行的线程不同的线程上执行,因此,虽然从技术上讲没有必要,但在实践中使用阻塞调用的应用程序将是多线程的(。

如果您不完全理解我所说的内容,请使用同步调用,因为这样会更容易。如果您的申请开始没有响应,您稍后将有机会重新考虑您的方法。