2013-01-23 2 views
1

this 예에서 비동기 요청이 만들어지고 완료되면 다른 비동기 요청이 해당 콜백에서 수행됩니다. 두 번째 콜백이 완료되면 첫 번째 스레드 (주)에서 어떻게 알릴 수 있습니까? 일반적으로 IAsyncResult를 모니터링하지만 두 번째 요청의 생성은 첫 번째 스레드의 범위에서 수행되지 않으므로 액세스 할 수 없습니다.비동기 요청에 대한 AsyncCallback이 완료된 경우 어떻게 알림을받을 수 있습니까?

+0

사용중인 .NET 버전은 무엇입니까? TPL에 액세스 할 수 있습니까? – Servy

+0

Mono 2.6은 .net 3.5와 대략 동일합니다. – Ford

답변

1

두 번째 콜백은 BeginGetResponse 대신 GetResponse을 사용하여 동기식으로 만들 수 있습니다. 그러면 IAsyncResult를 모니터링 할 수 있습니다.

또는 당신은 또한 그들이 끝에서 메인 스레드를 유지하기 위해 사용하는 것과 동일한 방법을 사용할 수 있습니다 : 첫 번째 콜백

allDone.WaitOne(); 

에서 사용 후 다른

private static ManualResetEvent allDone = new ManualResetEvent(false); 

를 작성하고 전화

allDone.Set(); 

두 번째 콜백에서

+0

그건 아주 좋은 지적입니다, 고마워요. 호기심에서 벗어나 뮤텍스 및 기타 등등과 같은 비동기 요청에 스레드가 적용되는 것과 같은 규칙이 적용되는지 여부를 알 수 있습니까? – Ford

+0

모든 동일한 규칙이 적용된다고 생각합니다. 비동기 호출은 수동으로 수행되는 것이 아니라 스레드 풀에서 스레드로 생성됩니다. –

0

콜백은 완료된 첫 번째 스레드에 신호를 보내야합니다. 예를 들어 이벤트를 사용하여 그렇게 할 수 있습니다. TaskCompletionSource은 친숙한 대체품입니다.

+0

죄송합니다. 원본 기사에서 Mono 2.6 (.net 3.5에 해당)에 대해 언급 했어야합니다. – Ford

+0

@Ford 왜 이벤트 솔루션이 작동하지 않습니까? 모노가 이벤트를 가지고 있지 않습니까? – usr

+0

main이 실제로 클래스의 메서드이고 이벤트를 사용했다면 이벤트 콜백을 비동기 요청을 시작한 클래스의 인스턴스와 일치시킬 수있는 방법이 있습니까? – Ford

관련 문제