我想在完成同时运行的多个工作时运行下一个工作

I want to run next work when several works are done which are running at same time

我想在多个工作同时运行时运行下一个工作

我不能指望完成工作的顺序。

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() { ... }
}

这种情况有更有效的解决方案吗?

对于这种情况,您的解决方案是什么?

有一个简单的解决方案,使用 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()
    {
    }
}