void IMultiTreeHandleable.ReAdd(PromisePassThrough passThrough) { _passThroughs.Push(passThrough); }
partial void IncrementProgress(PromisePassThrough passThrough);
bool IMultiTreeHandleable.Handle(Internal.IValueContainer valueContainer, PromisePassThrough passThrough, int index) { Promise owner = passThrough.Owner; bool done = --_waitCount == 0; bool handle = false; if (_pending) { owner._wasWaitedOn = true; if (owner._state != State.Resolved) { _pending = false; ((Internal.ResolveContainer <T>)_valueOrPrevious).Release(); valueContainer.Retain(); _valueOrPrevious = valueContainer; handle = true; } else { _onPromiseResolved.Invoke(valueContainer, (Internal.ResolveContainer <T>)_valueOrPrevious, index); if (done) { _pending = false; handle = true; } else { IncrementProgress(passThrough); } } } if (done) { while (_passThroughs.IsNotEmpty) { _passThroughs.Pop().Release(); } ReleaseInternal(); } return(handle); }
bool IMultiTreeHandleable.Handle(Internal.IValueContainer valueContainer, PromisePassThrough passThrough, int index) { Promise owner = passThrough.Owner; owner._wasWaitedOn = true; bool done = --_waitCount == 0; bool handle = _valueOrPrevious == null & (owner._state == State.Resolved | done); if (handle) { valueContainer.Retain(); _valueOrPrevious = valueContainer; } if (done) { while (_passThroughs.IsNotEmpty) { _passThroughs.Pop().Release(); } ReleaseInternal(); } return(handle); }