异步任务没有完成

时间:2016-04-08 23:48:53

标签: c# asynchronous async-await task

我试图启动很多任务,让他们只执行部分代码,然后等待ManualResetEvent。在我开始我需要的所有任务之后,我设置了事件,它们都执行了。

然后我需要知道他们什么时候都执行了,所以我在异步函数里面做了一个计数器。任务启动时TasksStarted会增加,任务结束时会增加TasksFinished。

我有一个等待执行任务的while循环,通过检查TasksStarted == TasksFinished,有时会进入无限循环,因为TasksFinished转到(例如)8,TasksStarted转到9。

知道为什么会这样吗?

      private void SetNext(int x, int y)
    {
        if (Evaluate(x, y))
        {
            if(!IsAlive(x,y))
            {
                Task.Run(() =>
                    {
                        Set(x, y);
                    });    
            }
        }
        else
        {
            if (IsAlive(x, y))
            {
                Task.Run(() =>
                {
                    Remove(x, y);
                });
            }
        }
    }

public async Task Remove(int x, int y)
    {
        try
        {
            tasksStarted++;
            Processing.WaitOne();
            if (!grid.ContainsKey(x))
            {
                tasksFinished++;
                return;
            }
            grid[x].Remove(y);
            tasksFinished++;
        }
        catch(Exception e)
        {

        }
    }

public async Task Set(int x, int y)
    {
        try
        {
            tasksStarted++;
            Processing.WaitOne();
            if (!grid.ContainsKey(x))
            {
                grid.Add(x, new HashSet<int>());
            }
            grid[x].Add(y);
            tasksFinished++;
        }
        catch(Exception e)
        {

        }
    }

0 个答案:

没有答案