Avoid unobserved tasks in WebSocketsTransport (#12315)
This commit is contained in:
parent
7209e0410c
commit
648bdf706e
|
|
@ -61,7 +61,7 @@ namespace Microsoft.AspNetCore.Http.Connections.Client.Internal
|
||||||
LoggerMessage.Define(LogLevel.Information, new EventId(16, "ClosingWebSocket"), "Closing WebSocket.");
|
LoggerMessage.Define(LogLevel.Information, new EventId(16, "ClosingWebSocket"), "Closing WebSocket.");
|
||||||
|
|
||||||
private static readonly Action<ILogger, Exception> _closingWebSocketFailed =
|
private static readonly Action<ILogger, Exception> _closingWebSocketFailed =
|
||||||
LoggerMessage.Define(LogLevel.Information, new EventId(17, "ClosingWebSocketFailed"), "Closing webSocket failed.");
|
LoggerMessage.Define(LogLevel.Debug, new EventId(17, "ClosingWebSocketFailed"), "Closing webSocket failed.");
|
||||||
|
|
||||||
private static readonly Action<ILogger, Exception> _cancelMessage =
|
private static readonly Action<ILogger, Exception> _cancelMessage =
|
||||||
LoggerMessage.Define(LogLevel.Debug, new EventId(18, "CancelMessage"), "Canceled passing message to application.");
|
LoggerMessage.Define(LogLevel.Debug, new EventId(18, "CancelMessage"), "Canceled passing message to application.");
|
||||||
|
|
|
||||||
|
|
@ -269,10 +269,6 @@ namespace Microsoft.AspNetCore.Http.Connections.Client.Internal
|
||||||
if (!_aborted)
|
if (!_aborted)
|
||||||
{
|
{
|
||||||
_application.Output.Complete(ex);
|
_application.Output.Complete(ex);
|
||||||
|
|
||||||
// We re-throw here so we can communicate that there was an error when sending
|
|
||||||
// the close frame
|
|
||||||
throw;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
|
|
@ -347,8 +343,15 @@ namespace Microsoft.AspNetCore.Http.Connections.Client.Internal
|
||||||
{
|
{
|
||||||
if (WebSocketCanSend(socket))
|
if (WebSocketCanSend(socket))
|
||||||
{
|
{
|
||||||
// We're done sending, send the close frame to the client if the websocket is still open
|
try
|
||||||
await socket.CloseOutputAsync(error != null ? WebSocketCloseStatus.InternalServerError : WebSocketCloseStatus.NormalClosure, "", CancellationToken.None);
|
{
|
||||||
|
// We're done sending, send the close frame to the client if the websocket is still open
|
||||||
|
await socket.CloseOutputAsync(error != null ? WebSocketCloseStatus.InternalServerError : WebSocketCloseStatus.NormalClosure, "", CancellationToken.None);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Log.ClosingWebSocketFailed(_logger, ex);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
_application.Input.Complete();
|
_application.Input.Complete();
|
||||||
|
|
|
||||||
|
|
@ -189,10 +189,6 @@ namespace Microsoft.AspNetCore.Http.Connections.Internal.Transports
|
||||||
if (!_aborted && !token.IsCancellationRequested)
|
if (!_aborted && !token.IsCancellationRequested)
|
||||||
{
|
{
|
||||||
_application.Output.Complete(ex);
|
_application.Output.Complete(ex);
|
||||||
|
|
||||||
// We re-throw here so we can communicate that there was an error when sending
|
|
||||||
// the close frame
|
|
||||||
throw;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
|
|
@ -270,8 +266,15 @@ namespace Microsoft.AspNetCore.Http.Connections.Internal.Transports
|
||||||
// Send the close frame before calling into user code
|
// Send the close frame before calling into user code
|
||||||
if (WebSocketCanSend(socket))
|
if (WebSocketCanSend(socket))
|
||||||
{
|
{
|
||||||
// We're done sending, send the close frame to the client if the websocket is still open
|
try
|
||||||
await socket.CloseOutputAsync(error != null ? WebSocketCloseStatus.InternalServerError : WebSocketCloseStatus.NormalClosure, "", CancellationToken.None);
|
{
|
||||||
|
// We're done sending, send the close frame to the client if the websocket is still open
|
||||||
|
await socket.CloseOutputAsync(error != null ? WebSocketCloseStatus.InternalServerError : WebSocketCloseStatus.NormalClosure, "", CancellationToken.None);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Log.ClosingWebSocketFailed(_logger, ex);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
_application.Input.Complete();
|
_application.Input.Complete();
|
||||||
|
|
|
||||||
|
|
@ -53,6 +53,9 @@ namespace Microsoft.AspNetCore.Http.Connections.Internal.Transports
|
||||||
private static readonly Action<ILogger, Exception> _closedPrematurely =
|
private static readonly Action<ILogger, Exception> _closedPrematurely =
|
||||||
LoggerMessage.Define(LogLevel.Debug, new EventId(14, "ClosedPrematurely"), "Socket connection closed prematurely.");
|
LoggerMessage.Define(LogLevel.Debug, new EventId(14, "ClosedPrematurely"), "Socket connection closed prematurely.");
|
||||||
|
|
||||||
|
private static readonly Action<ILogger, Exception> _closingWebSocketFailed =
|
||||||
|
LoggerMessage.Define(LogLevel.Debug, new EventId(15, "ClosingWebSocketFailed"), "Closing webSocket failed.");
|
||||||
|
|
||||||
public static void SocketOpened(ILogger logger, string subProtocol)
|
public static void SocketOpened(ILogger logger, string subProtocol)
|
||||||
{
|
{
|
||||||
_socketOpened(logger, subProtocol, null);
|
_socketOpened(logger, subProtocol, null);
|
||||||
|
|
@ -122,6 +125,11 @@ namespace Microsoft.AspNetCore.Http.Connections.Internal.Transports
|
||||||
{
|
{
|
||||||
_closedPrematurely(logger, ex);
|
_closedPrematurely(logger, ex);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void ClosingWebSocketFailed(ILogger logger, Exception ex)
|
||||||
|
{
|
||||||
|
_closingWebSocketFailed(logger, ex);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue