Ejemplo n.º 1
0
                bool IMultiTreeHandleable.Handle(Internal.IValueContainer valueContainer, PromisePassThrough passThrough, int index)
                {
                    Promise owner  = passThrough.Owner;
                    bool    done   = --_waitCount == 0;
                    bool    handle = false;

                    if (_valueOrPrevious == null)
                    {
                        owner._wasWaitedOn = true;
                        if (owner._state != State.Resolved | done)
                        {
                            valueContainer.Retain();
                            _valueOrPrevious = valueContainer;
                            handle           = true;
                        }
                        else
                        {
                            IncrementProgress(passThrough);
                        }
                    }
                    if (done)
                    {
                        while (_passThroughs.IsNotEmpty)
                        {
                            _passThroughs.Pop().Release();
                        }
                        ReleaseInternal();
                    }
                    return(handle);
                }
 void Internal.ITreeHandleable.MakeReady(Internal.IValueContainer valueContainer,
                                         ref ValueLinkedQueue <Internal.ITreeHandleable> handleQueue,
                                         ref ValueLinkedQueue <Internal.ITreeHandleable> cancelQueue)
 {
     valueContainer.Retain();
     _value = valueContainer;
     _state = valueContainer.GetState();
 }
Ejemplo n.º 3
0
                bool IMultiTreeHandleable.Handle(Internal.IValueContainer valueContainer, PromisePassThrough passThrough, int index)
                {
                    Promise owner  = passThrough.Owner;
                    bool    handle = _valueOrPrevious == null;

                    if (handle)
                    {
                        owner._wasWaitedOn = true;
                        valueContainer.Retain();
                        _valueOrPrevious = valueContainer;
                    }
                    if (--_waitCount == 0)
                    {
                        while (_passThroughs.IsNotEmpty)
                        {
                            _passThroughs.Pop().Release();
                        }
                        ReleaseInternal();
                    }
                    return(handle);
                }
 void Internal.ITreeHandleable.MakeReadyFromSettled(Internal.IValueContainer valueContainer)
 {
     valueContainer.Retain();
     _value = valueContainer;
     _state = valueContainer.GetState();
 }