의 나는 같은 노출 된 인터페이스를 가지고 있다고 가정 해 봅시다 :C# 스레딩 메커니즘
interface IMyService
{
MyResult MyOperation();
}
이 작업은 동기와 값을 반환합니다.
내 구현 된 인터페이스는 다음을 수행 할 수 있습니다
- 전화 비동기 방식 이벤트 번호
- 기다립니다 1
- 이벤트 번호 기다립니다 2
이것은 때문이다 타사 COM 개체 내가 함께 일하고 있습니다.
이 코드는 꽤 무작위 순서 중 하나에서 발생할 수있는 다음과 같은
public MyResult MyOperation()
{
_myCOMObject.AsyncOperation();
//Here I need to wait for both events to fire before returning
}
private void MyEvent1()
{
//My Event 1 is fired in this handler
}
private void MyEvent2()
{
//My Event 2 is fired in this handler
}
내 두 개의 이벤트 비슷합니다.
이것을 동기화하는 데 사용할 수있는 적절한 스레딩 메커니즘은 무엇입니까? 두 번째 이벤트를 기다리기 시작하기 전에 ManualResetEvent를 사용하고 있었고 두 이벤트 모두에서 손쉽게 사용할 수있는 방법을 보지 못했습니다. 이 두 이벤트는 MyOperation()에 대한 반환 값을 만들 수있는 변수를 설정합니다.
좋은 구현에 대한 아이디어가 있습니까? 제 3 자 객체가 구현되는 방식을 제어하지 못합니다.
이는 의미가 있습니다. 내 혼란은 여러 ManualResetEvents에서 Reset()을 호출하는 곳에서 거짓말을했고, MyOperation()에 대한 전체 호출을 잠궈 두 스레드가 동시에 함수를 호출 할 수 없도록해야합니다. – jonathanpeppers
이것은 완벽하게 훌륭한 해결책이지만, 두 개의 WaitOne 차단 호출 대신 WaitAll (아래 참조)을 사용합니다. WaitAll은 차단에 대한 더 많은 컨텍스트를 제공하고 잠재적으로 더 나은 일정을 잡을 기회를 제공합니다. – meandmycode
의견에 감사드립니다. 내 대답을 업데이트했습니다. –