anchor.diff:  
               | true, (fileStamp2, parsingOptions, projectOptions) ->
                   if fileStamp <> fileStamp2 then
  -                    singleFileCache.Remove(document.Id) |> ignore
  +                    singleFileCache.TryRemove(document.Id) |> ignore
                       return! tryComputeOptionsByFile document ct
                   else
                       return Some(parsingOptions, projectOptions)
  
positive.code:   
              | true, (oldProject, parsingOptions, projectOptions) ->
                  if isProjectInvalidated oldProject project settings then
                      cache.Remove(projectId) |> ignore
                      return! tryComputeOptions project
                  else
                      return Some(parsingOptions, projectOptions)
  
negative.code: 
      let legacyProjectSites = ConcurrentDictionary<ProjectId, IProjectSite>()
  
      let cache = ConcurrentDictionary<ProjectId, Project * FSharpParsingOptions * FSharpProjectOptions>()
      let singleFileCache = ConcurrentDictionary<DocumentId, VersionStamp * FSharpParsingOptions * FSharpProjectOptions>()
  
      let rec tryComputeOptionsByFile (document: Document) (ct: CancellationToken) =
          async {
  