2011-01-03 4 views
2

Delegate.BeginInvoke를 사용할 때 비동기 스레드의 상태를 가져 오도록 대리인을 질문하려면 어떻게해야합니까? 정말로 관심있는 상태는 스레드가 실행을 완료했는지 여부를 확인하는 것입니다. 고맙습니다.대표 스레드 상태 가져 오기

필자가 피하고 싶은 것은 새로운 스레드를 만든 스레드를 차단해야한다는 것입니다. 왜냐하면이 스레드가 완료되는 데 걸리는 시간을 신경 쓰지 않기 때문입니다.

+0

작업이 실행되는 * 스레드 *의 상태를 찾는 것이 유용하지는 않습니다. 'Delegate.BeginInvoke'는 thread-pool을 사용하기 때문에 델리게이트가 수행하는 쓰레드는 끝난 후에도 계속 진행할 수 있습니다. * task * 상태에 관심이있을 것입니다. – Ani

답변

1

IAsyncResult.IsCompleted을 사용할 수 있습니다.

+0

비동기 스레드가 완료 될 때까지 스레드를 시작하는 스레드가 차단되어야합니다. – Achilles

+0

아니요, 주 스레드에서 IAsyncResult를 사용할 필요가 없습니다. 일부 장기 실행 작업을 비동기 적으로 시작할 수 있습니다. 예를 들어 timer로 별도의 스레드를 만들면이 작업 상태를 폴링하여 UI에 진행 상황을 표시합니다. 또는 여러 개의 비동기 작업을 병렬로 실행하고 모든 비동기 작업이 완료 될 때까지 대기하십시오. –

+0

메인 스레드에서 비동기 작업을 호출해도 문제가 발생하지 않습니다. 단순히'IAsyncResult.IsComplete' 속성을 사용하여 폴링하는 한, 주 스레드 (또는 호출 스레드)는 기다리지 않고 계속 진행할 수 있어야합니다. 나는 당신의 코드가 블로킹 콜 인'IAsyncResult.EndInvoke'를 호출해야한다고 생각하지만,'IAsyncResult.IsComplete'가 true를 리턴 한 후에 만 ​​호출하도록 선택할 수 있습니다. –

1

이는 Delegate.EndInvoke를 호출하는 것과 관련하여 other question에 잘 연결됩니다. 그렇게했다면 스레드가 완료된 시점을 알 수 있습니다. 주 스레드를 차단하여 상태를 확인하지 않아도됩니다.

관련 문제