private async void StartScript() { var documentFile = documentService.ActiveDocumentFile; runScriptCancellation = new CancellationTokenSource(); var cancellationToken = runScriptCancellation.Token; RunningDocument = documentFile; startCommand.RaiseCanExecuteChanged(); stopCommand.RaiseCanExecuteChanged(); OutputViewModel.ClearOutput(documentFile); if (lastBuildResult == null || lastBuildResult.Item1 != documentFile) { using (new PerformanceTrace("BuildAsync", documentFile)) { var result = await workspace.BuildAsync(documentIds[documentFile], CancellationToken.None); documentFile.Content.ErrorList = result.Diagnostic.Where(x => x.Severity != DiagnosticSeverity.Hidden).Select(CreateErrorListItem).ToArray(); if (result.InMemoryAssembly != null) { lastBuildResult = new Tuple <DocumentFile, BuildResult>(documentFile, result); } else { lastBuildResult = null; } } } if (lastBuildResult != null) { using (new PerformanceTrace("RunScriptAsync", documentFile)) { var buildResult = lastBuildResult.Item2; try { await host.RunScriptAsync(buildResult.InMemoryAssembly, buildResult.InMemorySymbolStore, outputTextWriter, errorTextWriter, cancellationToken); } catch (OperationCanceledException) { } } ShellViewModel.IsOutputViewVisible = true; } else { ShellViewModel.IsErrorListViewVisible = true; } RunningDocument = null; runScriptCancellation = null; startCommand.RaiseCanExecuteChanged(); stopCommand.RaiseCanExecuteChanged(); }