public async Task <SolutionServiceResult> FinalizeSolutionSet(string id, CancellationToken cancellationToken)
        {
            if (string.IsNullOrEmpty(id))
            {
                throw new ArgumentNullException(nameof(id));
            }
            cancellationToken.ThrowIfCancellationRequested();
            if (await SolutionCache.FetchSizeAsync(cancellationToken) > Configuration.MaxCache)
            {
                return(SolutionServiceResult.Full);
            }
            var solution = await SolutionSet.FetchSolutionMetdataAsync(id, cancellationToken);

            var result = SolutionValidator.Validate(solution, cancellationToken);

            if (result == ValidationResult.Incomplete)
            {
                return(SolutionServiceResult.Incomplete);
            }
            if (result == ValidationResult.Invalid)
            {
                await SolutionSet.RemoveSolutionMetadataAsync(id, cancellationToken);

                return(SolutionServiceResult.StartOver);
            }
            await SolutionCache.PutAsync(solution, cancellationToken);

            await SolutionSet.RemoveSolutionMetadataAsync(id, cancellationToken);

            return(SolutionServiceResult.Success);
        }
 public async Task <TSolution> FetchSolutionSet(string id, CancellationToken cancellationToken)
 {
     if (string.IsNullOrEmpty(id))
     {
         throw new ArgumentNullException(nameof(id));
     }
     cancellationToken.ThrowIfCancellationRequested();
     return(await SolutionSet.FetchSolutionMetdataAsync(id, cancellationToken));
 }