일부 작업을 위임하는 스레드가 있습니다. 단일 작업이 완료되면 작업이 완료되었다는 이벤트가 발생합니다. 이러한 작업은 특정 순서로 실행되어야하며 이전 작업이 끝날 때까지 기다려야합니다. 스레드가 "작업 완료"이벤트를 수신 할 때까지 스레드를 대기 상태로 만들 수 있습니까? (플래그를 설정하고 플래그를 폴링하는 whilehandler를 제외하고)스레드가 이벤트를 기다렸다가 실행을 계속하는 데 사용할 수있는 메서드는 무엇입니까?
15
A
답변
27
나는 종종 AutoResetEvent
대기 핸들을 사용합니다.
먼저 처리해야하는 스레드는 resetEvent를 사용하고 이벤트가 끝날 때까지 기다립니다.
대기해야하는 스레드는 핸들을 보유 할 수 있으며 resetEvent.WaitOne()을 호출합니다. 첫 번째 완료 될 때까지 스레드가 차단됩니다.
이렇게하면 이벤트의 차단 및 정렬을 매우 명확하게 처리 할 수 있습니다.
5
하나의 옵션은 신호 완료에 EventWaitHandle을 사용하는 것입니다.
public void PerformAsyncTasks()
{
SomeClass someObj = new SomeClass()
AutoResetEvent waitHandle = new AutoResetEvent(false);
// create and attach event handler for the "Completed" event
EventHandler eventHandler = delegate(object sender, EventArgs e)
{
waitHandle.Set(); // signal that the finished event was raised
}
someObj.TaskCompleted += eventHandler;
// call the async method
someObj.PerformFirstTaskAsync();
// Wait until the event handler is invoked
waitHandle.WaitOne();
// the completed event has been raised, go on with the next one
someObj.PerformSecondTaskAsync();
waitHandle.WaitOne();
// ...and so on
}
1
당신은 이것에 대한 ManualResetEvent를 사용할 수 있습니다 내가 비동기 작업이 완료 될 때까지 기다릴 필요가있을 때
0
작업자 스레드가 완료 될 때 호출하는 콜백 메서드를 사용하여 좋은 결과를 얻었습니다. 폴링을 능가하며 매개 변수를 호출자에게 쉽게 전달할 수 있습니다.
관련 문제
- 1. 스레드가 완료 될 때까지 프로그램 실행을 중지하십시오.
- 2. Rhino를 조롱하는 데 사용할 수있는 스타일은 무엇입니까?
- 3. 벡터를 정렬하는 데 사용할 수있는 함수는 무엇입니까?
- 4. scheduledExecutorService.scheduleAtFixedRate() 메서드는 실시간 실행을 어떻게 보장합니까?
- 5. JavaScript에서 blur 메서드는 blur 이벤트를 트리거하지만 submit 메서드는 submit 이벤트를 트리거하지 않는 이유는 무엇입니까?
- 6. 스레드가 이벤트를 기다리고 있는지 확인하는 방법은 무엇입니까?
- 7. 공개 API에 사용할 XML serialization 메서드는 무엇입니까?
- 8. 몇 초 동안 실행을 일시 중지하고 루프를 계속하는 방법?
- 9. 애니메이션이 끝날 때까지 기다렸다가
- 10. VB6에서 사용할 수있는 델파이 DLL의 이벤트를 소비하십시오.
- 11. 제거 할 때 사용할 세션 메서드는 무엇입니까?
- 12. 인스턴스 메서드는 인스턴스화 스레드가 아닌 별도의 스레드에서 호출되었습니다.
- 13. Silverlight에서 이미지를 표시하는 데 사용할 수있는 컨트롤
- 14. Collection, 요소의 추가를 승인하는 데 사용되는 메서드는 무엇입니까?
- 15. 웹 서비스를 보호하는 데 사용할 수있는 방법은 무엇입니까?
- 16. 8bpp 이미지를 4bpp 형식으로 변환하는 데 사용할 수있는 도구는 무엇입니까?
- 17. Java에서 프로세스 COM 서버를 만드는 데 사용할 수있는 도구는 무엇입니까?
- 18. SiteKiosk 클라이언트를 디버그하는 데 사용할 수있는 기술과 도구는 무엇입니까?
- 19. ASP.NET 프로젝트에 지역화를 추가하는 데 사용할 수있는 도구는 무엇입니까?
- 20. AVM2 바이트 코드를 편집/생성하는 데 사용할 수있는 도구는 무엇입니까?
- 21. Java Swing :이 클래스를 구현하는 데 사용할 수있는 클래스는 무엇입니까?
- 22. 아이폰에 웹 페이지를 표시하는 데 사용할 수있는 툴킷은 무엇입니까?
- 23. 응용 프로그램을 업데이트하는 데 사용할 수있는 스크립트는 무엇입니까?
- 24. DropDownList를 채우는 데 사용할 수있는 가장 편안한 데이터 형식은 무엇입니까?
- 25. 데스크탑에서 MySQL 데이터베이스를 백업하는 데 사용할 수있는 도구는 무엇입니까?
- 26. Windows에서 Rails 사이트를 호스팅하는 데 사용할 수있는 항목은 무엇입니까?
- 27. CLR을 대상으로 컴파일러를 구현하는 데 사용할 수있는 도구와 라이브러리는 무엇입니까?
- 28. Windows에서 PDF를 이미지로 변환하는 데 사용할 수있는 C++ 라이브러리는 무엇입니까?
- 29. 웹 테스트를 자동화하는 데 사용할 수있는 언어는 무엇입니까?
- 30. mongodb에 테스트 데이터를 채우는 데 사용할 수있는 도구는 무엇입니까
첫 번째 대답을 바탕으로, 나는 이와 비슷한 것을하고 있습니다. EventResetMode.AutoReset으로 초기화 된 AutoResetEvent와 EventWaitHandle의 차이점은 무엇입니까? – MGSoto
@MGSoto : 그 차이는 최소한이라 생각합니다 :'AutoResetEvent'는'EventWaitHandle'을 상속 받았고 기본 클래스의 생성자를 사용하여'EventResetMode.AutoReset'을 전달한 것으로 보입니다. –
AutoResetEvent, WaitHandles 등은 IDisposable을 구현한다는 것을 잊지 마십시오. –