private async Task Run() { if (IsRunning) { return; } try { await EnsureNuGetPackages().ConfigureAwait(true); } catch (Exception) { IsRunning = false; throw; } Reset(); await MainViewModel.AutoSaveOpenDocuments().ConfigureAwait(true); SetIsRunning(true); var results = new ObservableCollection <ResultObject>(); ResultsInternal = results; var cancellationToken = _cts.Token; HookDumped(results, cancellationToken); try { var code = await GetCode(cancellationToken).ConfigureAwait(true); var errorResult = await _executionHost.ExecuteAsync(code).ConfigureAwait(true); _onError?.Invoke(errorResult); if (errorResult != null) { results.Add(errorResult); } } catch (CompilationErrorException ex) { foreach (var diagnostic in ex.Diagnostics) { results.Add(ResultObject.Create(diagnostic)); } } catch (Exception ex) { AddResult(ex, results, cancellationToken); } finally { SetIsRunning(false); } }
private async Task Run() { if (IsRunning) { return; } Reset(); await MainViewModel.AutoSaveOpenDocuments().ConfigureAwait(false); SetIsRunning(true); var results = new ObservableCollection <ResultObject>(); Results = results; var cancellationToken = _cts.Token; if (_executionHostOnDumped != null) { _executionHost.Dumped -= _executionHostOnDumped; } _executionHostOnDumped = o => AddResult(o, results, cancellationToken); _executionHost.Dumped += _executionHostOnDumped; try { var code = await MainViewModel.RoslynHost.GetDocument(DocumentId) .GetTextAsync(cancellationToken) .ConfigureAwait(true); await _executionHost.ExecuteAsync(code.ToString()).ConfigureAwait(true); } catch (CompilationErrorException ex) { foreach (var diagnostic in ex.Diagnostics) { results.Add(ResultObject.Create(diagnostic)); } } catch (Exception ex) { AddResult(ex, results, cancellationToken); } finally { SetIsRunning(false); } }