比方說,我有一個暴露的接口,例如: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()創建返回值。
關於良好實施的任何想法?我無法控制第三方對象的實現方式。
這是有道理的。我的困惑是在多個ManualResetEvents的Reset()上調用哪一個,並且我還必須將整個調用鎖定到MyOperation(),以便兩個線程不能同時調用該函數。 – jonathanpeppers 2009-08-11 16:29:25
儘管這是一個非常好的解決方案,但我會使用WaitAll(如下所示)而不是兩個WaitOne阻塞調用,WaitAll爲系統提供了有關阻塞的更多上下文,並有可能爲更好的調度提供機會。 – meandmycode 2009-08-11 16:31:32
感謝您的反饋。我已經更新了我的答案。 – 2009-08-11 17:56:20