use mailbox processors per-file to serialize diagnostics pushes #803
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Right now each publish of diagnostics for a file is fired off via Async.Start into the void. This can result in ordering issues with the state of each files' diagnostics collection.
This PR serializes publishing of diagnostics per-file by using a mailboxprocessor as a synchronization agent per-file, with error logging and restarts. The state of the file is maintained in a map that's returned recursively, and this way each individual publish action for a file is well-ordered with respect to that file.