Fix online lookup cache not clearing completed task on early return

The task not being cleared in the early return path would cause
`pendingRequestTask` to become stuck as a completed task, and
`queryValue()` would not recreate it due to the null check there,
therefore stalling all lookups forevermore until a game restart.
This commit is contained in:
Bartłomiej Dach 2021-12-21 10:55:43 +01:00
parent ee89d8643e
commit ca7303a50a
No known key found for this signature in database
GPG Key ID: BCECCD4FA41F6497
1 changed files with 15 additions and 7 deletions

View File

@ -116,7 +116,10 @@ private void performLookup()
}
if (nextTaskBatch.Count == 0)
{
finishPendingTask();
return;
}
// Query the values.
var request = CreateRequest(nextTaskBatch.Keys.ToArray());
@ -125,13 +128,7 @@ private void performLookup()
// todo: we probably want retry logic here.
api.Perform(request);
// Create a new request task if there's still more values to query.
lock (taskAssignmentLock)
{
pendingRequestTask = null;
if (pendingTasks.Count > 0)
createNewTask();
}
finishPendingTask();
var foundValues = RetrieveResults(request);
@ -157,6 +154,17 @@ private void performLookup()
}
}
private void finishPendingTask()
{
// Create a new request task if there's still more values to query.
lock (taskAssignmentLock)
{
pendingRequestTask = null;
if (pendingTasks.Count > 0)
createNewTask();
}
}
private void createNewTask() => pendingRequestTask = Task.Run(performLookup);
}
}