2015-01-04 5 views
0

我想在幾件作品同時運行的時候運行下一件作品我想在幾件作品同時運行的時候運行下一件作品

我不能指望其中的順序工作已經完成。

WorkA, WorkB, WorkC is running at the same time at different threads 

當每個工作完成 的code Manager.SetWorkState(Manager.WorkState)運行

Ex : WorkA is done 
Manager.SetWorkState(Manager.WorkState) Manager.SetWorkState(Manager.WorkState.WorkAIsDone); 

class Manager 
{ 

    public enum WorkState 
    { 
     WorkAIsDone = 0x1, 
     WorkBIsDone = 0x2, 
     WorkCIsDone = 0x4, 
    } 

     WorkState state; 

    public void SetWorkState(WorkState newState) 
    { 
     state = state | newState; 
     if (state == (WorkState.WorkAIsDone | WorkState.WorkBIsDone | WorkState.WorkCIsDone)) 
     { 
      Run_NextWork(); 
     } 
    } 

    public void Run_NextWork() { ... } 
} 

是否有這種情況比較有效的解決方案?

你對這種情況的解決方案是什麼?

+0

所以,你要當A,B和C已經完成發生什麼想法? – khlr 2015-01-04 14:28:36

+0

是的。那就對了。 – user2523112 2015-01-04 14:31:33

+1

它*效率不高,需要幾個納秒。重點在於寫*正確的*代碼,'state = newState | newState;'是無稽之談。 – 2015-01-04 14:37:54

回答

3

有一個簡單的解決方案,使用Task Parellel Library。 以下是隻是一些pseudocode,但我希望你能

class Manager 
{ 
    List<Task> _tasks; 

    public Manager() 
    { 

     _tasks = new List<Task>(); 

     //assuming your 3 tasks are already started from somewhere, run fourth task 
     StartNewTask(Run_NextWork); 
    } 

    public void StartNewTask(Action action) 
    { 
     //WaitAll waits for all tasks in array to complete before continuing 
     Task.WaitAll(_tasks.ToArray()); 
     var newTask = Task.Run(action); 
    } 

    public void Run_NextWork() 
    { 
    } 
} 
+0

感謝您的回答。 但是,每項工作都包括等待來自服務器的repsonse消息。 它不只是運行1個方法。 – user2523112 2015-01-04 14:34:13

相關問題