2013-07-26 6 views
1

내가 보낸 작업의 상태를 얻기 위해 특정 서버를 폴링해야하는 기능이 있습니다. 그것은 형식이다 : 메소드가 실행을 완료되기 전에 PollJobOutcomeAsync 메소드를 호출 메인 스레드를 종료 할 경우모든 비동기 메서드를 실행하기 전에 주 스레드가 죽지 않는지 확인

public Foo PollForJobOutcomeAsync(int pollSpan, Action<Foo> callback) 
{ 
    var caller = new AsyncMethodCaller((p, cb) => 
    { 
     PollForJobOutcome(p); 
     cb(this); 
    }); 
    caller.BeginInvoke(pollSpan, callback, null, null); 
    return this; 
} 

public void PollForJobOutcome(int pollSpan) 
{ 
    while (job not completed) 
    { 
     DoSomething();//send request to server, change job status according to response 
     Thread.Sleep(pollSpan); 
    } 
} 

지금 불행하게도 내가 원하는 상태 업데이트를받지 않습니다. 주 스레드가 죽기 전에이 함수가 실행을 완료하도록하려면 어떻게해야합니까?

+0

하는 데 도움이

result.AsyncWaitHandle.WaitOne();//main thread waits here till Async Operation completes 

희망 메인 스레드 호출에서 어떻게 든 후 리턴 값에 의해 주 스레드에이를 전달하거나 IAsyncResult를 반환합니다? Winform 또는 콘솔 응용 프로그램? –

+0

@SriramSakthivel Console 앱. 하지만 그것이 효과가 있습니까? – Likhit

+0

그냥 주 스레드가 종료되는 이유를 묻는 이유가 묻습니다. 왜 주 스레드를 만들어서 AsyncJob이 끝날 때까지 기다릴 수 없습니까? –

답변

1

여기서 WaitHandle을 사용할 수 있습니다.

IAsyncResult result = caller.BeginInvoke(pollSpan, callback, null, null); 

BeginInvoke이 메인 스레드가 종료 않는 방법

관련 문제