ConsoleTitleUpdateService.cs 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. using Microsoft.Extensions.Hosting;
  2. namespace CompServ.Worker;
  3. internal class ConsoleTitleUpdateService : BackgroundService
  4. {
  5. private const int UpdatePerSecond = 2;
  6. protected override async Task ExecuteAsync(CancellationToken stoppingToken)
  7. {
  8. var lastRIn = 0;
  9. var lastBIn = 0L;
  10. var lastBOut = 0L;
  11. var lastDt = DateTime.Now;
  12. while (stoppingToken.IsCancellationRequested == false)
  13. {
  14. await Task.Delay(1000 / UpdatePerSecond, stoppingToken);
  15. var rIn = StatusHolder.RequestIn;
  16. var rOut = StatusHolder.RequestOut;
  17. var bIn = StatusHolder.BytesIn;
  18. var bOut = StatusHolder.BytesOut;
  19. var dt = DateTime.Now;
  20. var rRun = rIn - rOut;
  21. var riSpeed = (rIn - lastRIn) / (dt - lastDt).TotalSeconds;
  22. var biSpeed = (bIn - lastBIn) / (dt - lastDt).TotalSeconds;
  23. var boSpeed = (bOut - lastBOut) / (dt - lastDt).TotalSeconds;
  24. Console.Title =
  25. $"XZSx{StatusHolder.Ratio} [{dt:dd HH:mm:ss.f}]" +
  26. $" ReqRIO:{rRun}/{rIn}/{rOut}" +
  27. $" ByteIO:{bIn:N0}/{bOut:N0}" +
  28. $" SpeedRiBiBo:{riSpeed:N1}/{biSpeed}/{boSpeed}";
  29. lastRIn = rIn;
  30. lastBIn = bIn;
  31. lastBOut = bOut;
  32. lastDt = dt;
  33. }
  34. }
  35. }