示例#1
0
        public QueryCallbackStatus InvokeIfReady()
        {
            QueryCallbackData callback = _callbacks.Dequeue();

            bool hasNext = true;

            while (hasNext)
            {
                if (_result != null && _result.Wait(0))
                {
                    Task <SQLResult> f = _result;
                    Action <QueryCallback, SQLResult> cb = callback._result;
                    _result = null;

                    cb(this, f.Result);

                    hasNext = _result != null;
                    if (_callbacks.Count == 0)
                    {
                        Contract.Assert(!hasNext);
                        return(QueryCallbackStatus.Completed);
                    }

                    // abort chain
                    if (!hasNext)
                    {
                        return(QueryCallbackStatus.Completed);
                    }

                    callback = _callbacks.Dequeue();
                }
                else
                {
                    return(QueryCallbackStatus.NotReady);
                }
            }

            return(QueryCallbackStatus.Completed);
        }
示例#2
0
        public bool InvokeIfReady()
        {
            QueryCallbackData callback = _callbacks.Peek();

            while (true)
            {
                if (_result != null && _result.Wait(0))
                {
                    Task <SQLResult> f = _result;
                    Action <QueryCallback, SQLResult> cb = callback._result;
                    _result = null;

                    cb(this, f.Result);

                    _callbacks.Dequeue();
                    bool hasNext = _result != null;
                    if (_callbacks.Count == 0)
                    {
                        Cypher.Assert(!hasNext);
                        return(true);
                    }

                    // abort chain
                    if (!hasNext)
                    {
                        return(true);
                    }

                    callback = _callbacks.Peek();
                }
                else
                {
                    return(false);
                }
            }
        }