2013-12-14 2 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이 동 기적으로 완료 될 수 있습니다.

소켓에는 자체 버퍼가 있습니다. 데이터가 소켓에 도착하면 OS는 사용자가 읽을 수있을 때까지 버퍼를 버퍼에 저장합니다. LoadAsync에 대한 버퍼에 충분한 데이터가 있으면 동기화됩니다.

+0

많은 감사! 정말 감사합니다. –

관련 문제