Skip to content

Commit

Permalink
[HTTP/3] Wrap Cancelled Request with OCE instead of QuicException (#1…
Browse files Browse the repository at this point in the history
…03081)

* Wrap Cancelled Request with OperationCanceledException instead of throwing QuicException as Inner

* Handle wrapping OperationAborted in OCE on ReadResponseContent

* Use properties from Concrete type

* Convert OCE to TCE

* Add comment for throwing TCE
  • Loading branch information
liveans authored Jun 18, 2024
1 parent 5d1981e commit a3e728a
Showing 1 changed file with 11 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -275,6 +275,12 @@ await Task.WhenAny(sendRequestTask, readResponseTask).ConfigureAwait(false) == s
Exception abortException = _connection.Abort(HttpProtocolException.CreateHttp3ConnectionException(code, SR.net_http_http3_connection_close));
throw new HttpRequestException(HttpRequestError.HttpProtocolError, SR.net_http_client_execution_error, abortException);
}
catch (QuicException ex) when (ex.QuicError == QuicError.OperationAborted && cancellationToken.IsCancellationRequested)
{
// It is possible for QuicStream's code to throw an
// OperationAborted QuicException when cancellation is requested.
throw new TaskCanceledException(ex.Message, ex, cancellationToken);
}
catch (QuicException ex) when (ex.QuicError == QuicError.OperationAborted && _connection.AbortException != null)
{
// we closed the connection already, propagate the AbortException
Expand Down Expand Up @@ -1277,6 +1283,11 @@ private void HandleReadResponseContentException(Exception ex, CancellationToken
: HttpRequestError.Unknown;
throw new HttpRequestException(httpRequestError, SR.net_http_client_execution_error, _connection.AbortException);

case QuicException e when (e.QuicError == QuicError.OperationAborted && cancellationToken.IsCancellationRequested):
// It is possible for QuicStream's code to throw an
// OperationAborted QuicException when cancellation is requested.
throw new TaskCanceledException(e.Message, e, cancellationToken);

case HttpIOException:
_connection.Abort(ex);
ExceptionDispatchInfo.Throw(ex); // Rethrow.
Expand Down

0 comments on commit a3e728a

Please sign in to comment.