Допустим, у меня есть открытый интерфейс как таковой:
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, прежде чем мне пришлось ждать второго события, и я не видел простого способа использовать его для обоих событий. Эти 2 события устанавливают переменные, которые позволяют мне создать возвращаемое значение для MyOperation ().
Есть идеи по хорошей реализации для этого? У меня нет контроля над реализацией стороннего объекта.