在委托完成之前发生多个异步调用时会发生什么?

时间:2012-03-20 12:44:03

标签: .net asynchronous concurrency asyncsocket

我正在尝试编写一个在两个套接字之间传递数据的相当简单的应用程序。但是,我对使用NetworkStream异步操作(BeginRead和EndRead)感到有点困惑。

例如:

while (myNetworkStream.DataAvailable)
  myNetworkStream.BeginRead(mBrowserDataBuffer, 0, mBrowserDataBuffer.Length, new AsyncCallback(ProcessNetworkStreamRead), myNetworkStream);

当我调用BeginRead时,该方法将立即返回并启动一个线程来执行读操作。但是,在上面的循环中,如果在委托完成之前将BeginRead调用为AGAIN会发生什么?

基本上我希望我的委托将传入的数据附加到更大的缓冲区,然后在完成后处理消息。我需要使用异步操作,因为当一个套接字正在读取时,我也想从另一个套接字读取和处理。

1 个答案:

答案 0 :(得分:1)

只有一个线程必须从同一个流中读取。

一个诀窍是在BeginRead回调中再次呼叫EndRead。如您所示,在循环中执行此操作是不正确的。