2013-12-14 39 views
0

我寫了一個使用StreamSocket類的windows phone 8應用程序,但發現了一個奇怪的情況。我的代碼是如下將DataReader.LoadAsync()同步運行嗎?

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

也許這可以幫助一些東西:http://stackoverflow.com/questions/5095183/how-would-i-run-an-async-taskt-method-synchronously – Romasz

+1

不涉及你的問題,但你應該真的避免使用'async void'方法(事件處理程序除外)。 – svick

+1

任何你可以「等待」的東西都可以同步完成。 –

回答

2

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

套接字有自己的緩衝區;當數據到達套接字時,操作系統會爲您緩衝,直到您讀取它爲止。如果緩衝區中有足夠的數據完成LoadAsync,那麼它將是同步的。

+0

非常感謝!真的很感激它。 –