我写了一个使用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。它有时会同步吗?
答案 0 :(得分:2)
是的,DataReader.LoadAsync
可以同步完成。
套接字有自己的缓冲区;当数据到达套接字时,操作系统会为您缓冲它,直到您可以读取它为止。如果缓冲区中有足够的数据可以完成LoadAsync
,那么它将是同步的。