private async Task <Task> AcceptWebsocketConnectionAsync(HttpContext context) { Task connectionTask; await _semaphore.WaitAsync().ConfigureAwait(false); try { Log.Trace("Accepting websocket connection"); var webSocket = await context.WebSockets.AcceptWebSocketAsync().ConfigureAwait(false); connectionTask = await _handler.AcceptConnectionAsync(webSocket).ConfigureAwait(false); Log.Trace("Websocket connection accepted"); } finally { _semaphore.Release(); } return(connectionTask); }