public async Task Get(int id) { Response.Headers.Add("Content-Type", "text/event-stream"); Models.Report resp = new Models.Report() { id = id }; int retry = 5; try { while (retry > 0) { lock (DomainInfoHostedService.Engine.Cache.Reports) { var match = DomainInfoHostedService.Engine.Cache.Reports.SingleOrDefault(s => s.ID == id); if (match == null) { resp.info = "No partial results yet"; } else { resp.Load(match); if (match.Complete) { resp.info = "Complete!"; retry = 0; } else { resp.info = $"{(resp.reports == null ? 0 : match.TaskReports.Count)} partial result/s"; } } } byte[] messageBytes = ASCIIEncoding.ASCII.GetBytes(JsonConvert.SerializeObject(resp)); await Response.Body.WriteAsync(messageBytes, 0, messageBytes.Length); await Response.Body.FlushAsync(); if (retry == 0) { break; } await Task.Delay(TimeSpan.FromSeconds(3)); retry--; } } catch (Exception ex) { resp.info = $"Error:{ex.Message} : {ex.StackTrace}"; byte[] messageBytes = ASCIIEncoding.ASCII.GetBytes(JsonConvert.SerializeObject(resp)); await Response.Body.WriteAsync(messageBytes, 0, messageBytes.Length); await Response.Body.FlushAsync(); } }
public Models.Report GetReport(Models.ReportRequest qp) { Models.Report resp = new Models.Report() { id = qp.Id }; try { lock (DomainInfoHostedService.Engine.Cache.Reports) { var match = DomainInfoHostedService.Engine.Cache.Reports.SingleOrDefault(s => s.ID == qp.Id); if (match == null) { resp.info = "No partial results yet"; return(resp); } if (qp.Getpartial) { resp.Load(match); resp.info = match.Complete ? "Complete!" : $"{(resp.reports == null ? 0 : match.TaskReports.Count)} partial result/s"; return(resp); } if (match.Complete) { resp.Load(match); resp.info = "Complete!"; return(resp); } resp.info = $"{(match.TaskReports.Count)} partial result/s"; } } catch (Exception ex) { resp.info = $"Error:{ex.Message}"; } return(resp); }