async private Task doGitUpdateAsync(string arguments, string path) { Debug.Assert(_currentUpdateType.HasValue); Debug.Assert(_currentUpdateOperationDescriptor == null); if (_isDisposed) { return; } void onProgressChangeAggregate(string status) => _onProgressChangeCallbacks?.ForEach(x => x?.Invoke(status)); void onUpdateStateChangeAggregate() => _onUpdateStateChangeCallbacks?.ForEach(x => x?.Invoke()); ExternalProcess.AsyncTaskDescriptor descriptor = _processManager.CreateDescriptor( "git", arguments, path, onProgressChangeAggregate, null); try { _currentUpdateOperationDescriptor = descriptor; onUpdateStateChangeAggregate(); traceInformation(String.Format("START git with arguments \"{0}\" in \"{1}\" for {2}", arguments, _gitRepository.Path, _gitRepository.ProjectKey.ProjectName)); await _processManager.Wait(descriptor); } finally { traceInformation(String.Format("FINISH git with arguments \"{0}\" in \"{1}\" for {2}", arguments, _gitRepository.Path, _gitRepository.ProjectKey.ProjectName)); _currentUpdateOperationDescriptor = null; onUpdateStateChangeAggregate(); } }
public void Cancel(ExternalProcess.AsyncTaskDescriptor descriptor) { if (_isDisposed) { return; } _externalProcessManager.Cancel(descriptor); }
async public Task Wait(ExternalProcess.AsyncTaskDescriptor descriptor) { if (_isDisposed) { return; } try { await _externalProcessManager.Wait(descriptor); checkStandardError(descriptor.StdErr); traceOperationStatus(descriptor.Process.StartInfo.Arguments, "end"); } catch (ExternalProcessFailureException ex) { handleException("wait", ex); } }
async protected Task <ExternalProcess.AsyncTaskDescriptor> startExternalProcessAsync( string appName, string arguments, string path, int[] successCodes) { try { ExternalProcess.AsyncTaskDescriptor d = _processManager.CreateDescriptor( appName, arguments, path, null, successCodes); await _processManager.Wait(d); return(d); } catch (OperationCancelledException) { return(null); } catch (SystemException ex) { throw new GitCommandServiceInternalException(ex); } catch (GitCallFailedException ex) { throw new GitCommandServiceInternalException(ex); } }