public async Task StopAsync(CancellationToken cancellationToken) { if (TryCreateStopMessage(out IpcMessage requestMessage)) { try { IpcMessage response = await IpcClient.SendMessageAsync(_endpoint, requestMessage, cancellationToken).ConfigureAwait(false); DiagnosticsClient.ValidateResponseMessage(response, nameof(StopAsync)); } // On non-abrupt exits (i.e. the target process has already exited and pipe is gone, sending Stop command will fail). catch (IOException) { throw new ServerNotAvailableException("Could not send Stop command. The target process may have exited."); } } }
private static EventPipeSession CreateSessionFromResponse(IpcEndpoint endpoint, ref IpcResponse?response, string operationName) { try { DiagnosticsClient.ValidateResponseMessage(response.Value.Message, operationName); long sessionId = BitConverter.ToInt64(response.Value.Message.Payload, 0); var session = new EventPipeSession(endpoint, response.Value, sessionId); response = null; return(session); } finally { response?.Dispose(); } }
///<summary> /// Stops the given session ///</summary> public void Stop() { if (TryCreateStopMessage(out IpcMessage requestMessage)) { try { IpcMessage response = IpcClient.SendMessage(_endpoint, requestMessage); DiagnosticsClient.ValidateResponseMessage(response, nameof(Stop)); } // On non-abrupt exits (i.e. the target process has already exited and pipe is gone, sending Stop command will fail). catch (IOException) { throw new ServerNotAvailableException("Could not send Stop command. The target process may have exited."); } } }