private bool RemoveAllInvalidYieldStackPredicate(YieldStack stack) { bool validHandle; var handle = stack.handle; lock (handle) { validHandle = !handle.isDone && handle.stack == stack; } if (validHandle) { if (stack.waitForUpdate) { tempStageStackes.Add(stack); } } else { List <YieldStack> stageStacks; if (TryGetOtherStageFromYieldInstruction(stack.yieldInstruction, out stageStacks)) { lock (stageStacks) { // TODO: indexed set? stageStacks.Remove(stack); } } pool.Release(stack); } return(!validHandle); }
public void Release(YieldStack stack) { lock (pool) { stack.Clear(); pool.Push(stack); } }
public override void Stop() { lock (this) { stack = null; isDone = true; } }