public Task WriteBuildResponse(BuildResponse response, CancellationToken cancellationToken) { return(response.WriteAsync(_pipeStream, cancellationToken)); }
public Task WriteBuildResponseAsync(BuildResponse response, CancellationToken cancellationToken) => response.WriteAsync(Stream, cancellationToken);
public async Task ServeConnection() { BuildRequest request; try { Log("Begin reading request"); request = await BuildRequest.ReadAsync(pipeStream, cancellationTokenSource.Token).ConfigureAwait(false); Log("End reading request"); } catch (IOException e) { LogException(e, "Reading request from named pipe."); FinishConnection(CompletionReason.IOFailure); return; } catch (OperationCanceledException e) { LogException(e, "Reading request from named pipe."); FinishConnection(CompletionReason.Cancelled); return; } if (!ClientAndOurIdentitiesMatch(pipeStream)) { Log("Client identity doesn't match."); FinishConnection(CompletionReason.SecurityViolation); return; } CheckForNewKeepAlive(request); // Start a monitor that cancels if the pipe closes on us var _ = MonitorPipeForDisconnection().ConfigureAwait(false); // Do the compilation Log("Begin compilation"); BuildResponse response = await Task.Run(() => { try { return(handler.HandleRequest(request, cancellationTokenSource.Token)); } catch (Exception e) if (CompilerFatalError.ReportUnlessCanceled(e)) { throw ExceptionUtilities.Unreachable; } }).ConfigureAwait(false); Log("End compilation"); try { Log("Begin writing response"); await response.WriteAsync(pipeStream, cancellationTokenSource.Token).ConfigureAwait(false); Log("End writing response"); } catch (IOException e) { LogException(e, "Writing response to named pipe."); FinishConnection(CompletionReason.IOFailure); return; } catch (OperationCanceledException e) { LogException(e, "Writing response to named pipe."); FinishConnection(CompletionReason.Cancelled); return; } Log("Completed writing response to named pipe."); FinishConnection(CompletionReason.Success); }
public Task WriteBuildResponse(BuildResponse response, CancellationToken cancellationToken) { return response.WriteAsync(_pipeStream, cancellationToken); }