diff --git a/src/CommunityToolkit.Datasync.Client/Offline/Operations/PullOperationManager.cs b/src/CommunityToolkit.Datasync.Client/Offline/Operations/PullOperationManager.cs index 8754969..2257831 100644 --- a/src/CommunityToolkit.Datasync.Client/Offline/Operations/PullOperationManager.cs +++ b/src/CommunityToolkit.Datasync.Client/Offline/Operations/PullOperationManager.cs @@ -141,10 +141,18 @@ public async Task ExecuteAsync(IEnumerable requests, Pu } }); + // Get requests we need to enqueue. Note : do not enqueue them yet. Context only supports one outstanding query at a time and we don't want a query from a background task being run concurrently with GetDeltaTokenAsync. + List requestsToEnqueue = []; foreach (PullRequest request in requests) { DateTimeOffset lastSynchronization = await context.DeltaTokenStore.GetDeltaTokenAsync(request.QueryId, cancellationToken).ConfigureAwait(false); request.QueryDescription = PrepareQueryDescription(request.QueryDescription, lastSynchronization); + requestsToEnqueue.Add(request); + } + + // Now enqueue the requests. + foreach (PullRequest request in requestsToEnqueue) + { serviceRequestQueue.Enqueue(request); }