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); }
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); } } }