我有一個名爲FooBar的對象,它公開了N個Foo方法和一個close方法。 Foo方法獲取一些數據並關閉對象(如果它們正在運行,則實質上會中止所有Foo方法)。 Foo方法可以並行運行(多線程支持)。方法和一組方法之間的同步
我希望只有在完成所有Foo方法後才能工作。爲此,我在所有Foo和Close方法中添加了一個鎖對象。這樣我確保關閉不成功,如果Foo操作正在進行。
通過上述同步設計,我失去了並行運行Foo方法的能力。
有沒有解決上述問題的設計模式/方法?
我有一個名爲FooBar的對象,它公開了N個Foo方法和一個close方法。 Foo方法獲取一些數據並關閉對象(如果它們正在運行,則實質上會中止所有Foo方法)。 Foo方法可以並行運行(多線程支持)。方法和一組方法之間的同步
我希望只有在完成所有Foo方法後才能工作。爲此,我在所有Foo和Close方法中添加了一個鎖對象。這樣我確保關閉不成功,如果Foo操作正在進行。
通過上述同步設計,我失去了並行運行Foo方法的能力。
有沒有解決上述問題的設計模式/方法?
您可以使用TPL waitall在運行close方法之前執行所有任務。我已經從MSDN中刪除了一些代碼(https://msdn.microsoft.com/en-us/library/dd270695(v=vs.110).aspx)。
Task<int>[] tasks = new Task<int>[n];
for (int i = 0; i < n; i++)
{
tasks[i] = Task<int>.Factory.StartNew(action, i);
}
以上代碼行了所有的工作,這樣你非常好,裏面Facotry.StartNew方法調用(yourmethodcall,I)
一旦你創建了所有的任務,那麼你可以調用等全部替換它們完成任務的執行。一旦等待所有被稱爲它的程序將等待所有任務執行完成。
Task.WaitAll(tasks);
在這行代碼之後,您可以調用close方法來完成其餘的操作。
你想使用TPL嗎? – qamar 2015-01-21 10:50:09