public async Task Invoke(HttpContext context) { if (!context.WebSockets.IsWebSocketRequest) { await _next.Invoke(context); return; } CancellationToken ct = context.RequestAborted; using (WebSocket currentSocket = await context.WebSockets.AcceptWebSocketAsync()) { var resultId = await ReceiveStringAsync(currentSocket, ct); var cnt = 0; while (!ct.IsCancellationRequested && !currentSocket.CloseStatus.HasValue) { var resultClient = ResultClient.Create(); var actualResult = await resultClient.Get(new Guid(resultId)); await SendStringAsync(currentSocket, $"{actualResult} {cnt++}", ct); await Task.Delay(1000); } await currentSocket.CloseAsync(WebSocketCloseStatus.NormalClosure, "Closing", ct); } }
protected override async Task RunAsync(CancellationToken cancellationToken) { while (true) { try { var queueClient = QueueClient.Create(_queueName); var message = await queueClient.GetMessageAsync(); if (message != null) { string response; response = await RunSproAsync(message.SessionType, message.UserName); //response = $"ANSWER FOR {message.MessageId} : {message.UserName} {message.SessionType}"; var resultClient = ResultClient.Create(); await resultClient.Set(message.MessageId, response).ConfigureAwait(false); } else { await Task.Delay(1000); } } catch (Exception ex) { ServiceEventSource.Current.ServiceMessage(this.Context, "EXCEPTION : " + ex.ToString()); await Task.Delay(250); } } }