DataReader.LoadAsync()会同步运行吗?

时间:2013-12-14 07:13:59

标签: c# sockets windows-phone-8 windows-phone async-await

我写了一个使用StreamSocket类的windows phone 8 app,但发现了一个奇怪的情况。我的代码如下

async void Connect() {

  await StreamSocketConnect();

  TryToSendAsync();

  ReceiveAsync();
}

async void ReceiveAsync() { 
                            //WriteLine("111");
   await DataReader.LoadAsync();
                            //WriteLine("222");
   DoReceiverCallBack();
}

async void TryToSendAsync(){

   await DataWriter.StoreAsync();

 }

void DoReceiveCallBack() { 
                             //WriteLine("333");
   ReceiveAsync();
                             //WriteLine("444");
}

按顺序,它应该遵循333 => 111 => 444 => 222,但有时我会得到333 => 111 => 222 =>特别是在接收数据时444。它有时会同步吗?

1 个答案:

答案 0 :(得分:2)

是的,DataReader.LoadAsync可以同步完成。

套接字有自己的缓冲区;当数据到达套接字时,操作系统会为您缓冲它,直到您可以读取它为止。如果缓冲区中有足够的数据可以完成LoadAsync,那么它将是同步的。