private async Task EnqueueWorkItemAsync(ProjectChanges projectChanges) { await EnqueueProjectConfigurationChangeWorkItemAsync(projectChanges) .ConfigureAwait(false); foreach (var addedDocumentId in projectChanges.GetAddedDocuments()) { await EnqueueWorkItemAsync( projectChanges.NewProject.GetRequiredDocument(addedDocumentId), InvocationReasons.DocumentAdded ) .ConfigureAwait(false); } foreach (var changedDocumentId in projectChanges.GetChangedDocuments()) { await EnqueueWorkItemAsync( projectChanges.OldProject.GetRequiredDocument(changedDocumentId), projectChanges.NewProject.GetRequiredDocument(changedDocumentId) ) .ConfigureAwait(continueOnCapturedContext: false); } foreach (var removedDocumentId in projectChanges.GetRemovedDocuments()) { await EnqueueWorkItemAsync( projectChanges.OldProject.GetRequiredDocument(removedDocumentId), InvocationReasons.DocumentRemoved ) .ConfigureAwait(false); } }
/// <summary> /// Saves the updated documents to disk. /// </summary> /// <param name="projectChanges">The project changes.</param> /// <param name="newSolution">The new solution.</param> private static void SaveUpdatedDocumentsToDisk(ProjectChanges projectChanges, Solution newSolution) { var s_utf8WithoutBom = new UTF8Encoding(false); var changedDocumentIds = projectChanges.GetChangedDocuments(true).ToList(); changedDocumentIds.ForEach(documentId => { var document = newSolution.GetDocument(documentId); var text = document.GetTextAsync(); using (var writer = new StreamWriter(document.FilePath, append: false, encoding: text.Result.Encoding ?? s_utf8WithoutBom)) { text.Result.Write(writer); } }); }
private async Task EnqueueWorkItemAsync(ProjectChanges projectChanges) { await EnqueueProjectConfigurationChangeWorkItemAsync(projectChanges).ConfigureAwait(false); foreach (var addedDocumentId in projectChanges.GetAddedDocuments()) { await EnqueueWorkItemAsync(projectChanges.NewProject.GetDocument(addedDocumentId), InvocationReasons.DocumentAdded).ConfigureAwait(false); } foreach (var changedDocumentId in projectChanges.GetChangedDocuments()) { await EnqueueWorkItemAsync(projectChanges.OldProject.GetDocument(changedDocumentId), projectChanges.NewProject.GetDocument(changedDocumentId)) .ConfigureAwait(continueOnCapturedContext: false); } foreach (var removedDocumentId in projectChanges.GetRemovedDocuments()) { await EnqueueWorkItemAsync(projectChanges.OldProject.GetDocument(removedDocumentId), InvocationReasons.DocumentRemoved).ConfigureAwait(false); } }