2012-03-16 3 views
1

내가 사용하는 경우 :C# async 소켓 - 항상 비동기 콜백이 호출됩니까?

connectionSocket.BeginSend(data, 0, length, SocketFlags.None, out error, new AsyncCallback(SendDataDone), state); 

작업이 나는 asyncRes.CompletedSynchronously 테스트 및 내 콜백이 호출되지 않은 사실 반환하는 경우 알아야 할 동 기적으로 완료되었거나 때의 경우도라는 SendDataDone 콜백인가? 문서에 따르면

내가 콜백은 항상 호출됩니다 기대

...

답변

1

:

콜백 방법은 EndSend 메소드를 호출 할 필요가 있습니다. 응용 프로그램이 BeginSend를 호출하면 에 지정된 스레드를 사용하여 지정된 콜백 메서드를 실행하고 소켓이 요청 된 바이트 수를 보내거나 예외를 throw 할 때까지 EndSend에서 차단합니다.

아무 것도 스레드를 죽이지 않는 한 가능한 인수 예외를 처리하고 기다릴 준비가되었습니다. 모두 잘되어야합니다. 가능한 SocketException 또는 ObjectDisposedException 처리에 대해서만 알고 있어야합니다.

+0

예, 그렇지 않으면 * EndSend * woul이 비동기 호출 패턴을 완료하지 못하고 요청에 대한 리소스가 해제되지 않습니다. – Ghita