private async Task SynchronizeSolutionAsync(SolutionStateChecksums solutionChecksumObject, CancellationToken cancellationToken)
        {
            // get children of solution checksum object at once
            using (var pooledObject = SharedPools.Default<HashSet<Checksum>>().GetPooledObject())
            {
                var solutionChecksums = pooledObject.Object;

                AddIfNeeded(solutionChecksums, solutionChecksumObject.Children);
                await _assetService.SynchronizeAssetsAsync(solutionChecksums, cancellationToken).ConfigureAwait(false);
            }
        }
        private async Task SynchronizeProjectsAsync(SolutionStateChecksums solutionChecksumObject, CancellationToken cancellationToken)
        {
            // get children of project checksum objects at once
            using (var pooledObject = SharedPools.Default<HashSet<Checksum>>().GetPooledObject())
            {
                var projectChecksums = pooledObject.Object;

                foreach (var projectChecksum in solutionChecksumObject.Projects)
                {
                    var projectChecksumObject = await _assetService.GetAssetAsync<ProjectStateChecksums>(projectChecksum, cancellationToken).ConfigureAwait(false);
                    AddIfNeeded(projectChecksums, projectChecksumObject.Children);
                }

                await _assetService.SynchronizeAssetsAsync(projectChecksums, cancellationToken).ConfigureAwait(false);
            }
        }
 public bool TryGetStateChecksums(out SolutionStateChecksums stateChecksums)
 {
     return _lazyChecksums.TryGetValue(out stateChecksums);
 }