我试图启动很多任务,让他们只执行部分代码,然后等待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)
{
}
}