/// <summary> /// Send a command to debugger. /// </summary> /// <param name="command">Command.</param> /// <param name="cancellationToken">Cancellation token.</param> public async Task SendRequestAsync(DebuggerCommand command, CancellationToken cancellationToken = new CancellationToken()) { cancellationToken.ThrowIfCancellationRequested(); try { TaskCompletionSource<JObject> promise = _messages.GetOrAdd(command.Id, i => new TaskCompletionSource<JObject>()); _connection.SendMessage(command.ToString()); cancellationToken.ThrowIfCancellationRequested(); JObject response = await promise.Task.ConfigureAwait(false); cancellationToken.ThrowIfCancellationRequested(); command.ProcessResponse(response); } finally { TaskCompletionSource<JObject> promise; _messages.TryRemove(command.Id, out promise); } }
private async Task<bool> TrySendRequestAsync(DebuggerCommand command, CancellationToken cancellationToken = new CancellationToken()) { try { await _client.SendRequestAsync(command, cancellationToken).ConfigureAwait(false); return true; } catch (DebuggerCommandException ex) { var evt = DebuggerOutput; if (evt != null) { evt(this, new OutputEventArgs(null, ex.Message + Environment.NewLine)); } return false; } }