Fixed being able to create duplicate characters

This commit is contained in:
hondacrx
2017-06-28 18:46:22 -04:00
parent 26bcb1e9a1
commit 216ce1d0af
+15 -10
View File
@@ -42,7 +42,7 @@ namespace Framework.Database
public QueryCallback WithChainingCallback(Action<QueryCallback, SQLResult> callback) public QueryCallback WithChainingCallback(Action<QueryCallback, SQLResult> callback)
{ {
_callbacks.Add(new QueryCallbackData(callback)); _callbacks.Enqueue(new QueryCallbackData(callback));
return this; return this;
} }
@@ -53,19 +53,21 @@ namespace Framework.Database
public QueryCallbackStatus InvokeIfReady() public QueryCallbackStatus InvokeIfReady()
{ {
QueryCallbackData callback = _callbacks.First(); QueryCallbackData callback = _callbacks.Dequeue();
if (_result.IsCompleted)
bool hasNext = true;
while (hasNext)
{
if (_result != null && _result.Wait(0))
{ {
Task<SQLResult> f = _result; Task<SQLResult> f = _result;
Action<QueryCallback, SQLResult> cb = callback._result; Action<QueryCallback, SQLResult> cb = callback._result;
_result = null; _result = null;
callback.Clear();
cb(this, f.Result); cb(this, f.Result);
_callbacks.RemoveAt(0); hasNext = _result != null;
bool hasNext = _result != null; if (_callbacks.Count == 0)
if (_callbacks.Empty())
{ {
Contract.Assert(!hasNext); Contract.Assert(!hasNext);
return QueryCallbackStatus.Completed; return QueryCallbackStatus.Completed;
@@ -75,14 +77,17 @@ namespace Framework.Database
if (!hasNext) if (!hasNext)
return QueryCallbackStatus.Completed; return QueryCallbackStatus.Completed;
return QueryCallbackStatus.NextStep; callback = _callbacks.Dequeue();
} }
else
return QueryCallbackStatus.NotReady; return QueryCallbackStatus.NotReady;
} }
return QueryCallbackStatus.Completed;
}
Task<SQLResult> _result; Task<SQLResult> _result;
List<QueryCallbackData> _callbacks = new List<QueryCallbackData>(); Queue<QueryCallbackData> _callbacks = new Queue<QueryCallbackData>();
} }
struct QueryCallbackData struct QueryCallbackData