fork download
  1. namespace SukaBlyad
  2. {
  3. using System;
  4. using System.Collections.Concurrent;
  5. using System.Threading;
  6. using System.Threading.Tasks;
  7. using Microsoft.Extensions.DependencyInjection;
  8. using Microsoft.Extensions.Hosting;
  9. using Microsoft.Extensions.Logging;
  10.  
  11. public class Program
  12. {
  13. public static void Main(string[] args)
  14. {
  15. CreateHostBuilder(args).Build().Run();
  16. }
  17.  
  18. public static IHostBuilder CreateHostBuilder(string[] args) =>
  19. Host.CreateDefaultBuilder(args)
  20. .ConfigureServices((hostContext, services) =>
  21. {
  22. services.AddSingleton<SquareQueue>();
  23. services.AddHostedService<SquareWorker>();
  24. services.AddHostedService<AddDataWorcker>();
  25. });
  26. }
  27.  
  28. public class SquareWorker : BackgroundService
  29. {
  30. private readonly ILogger<SquareQueue> _logger;
  31. private readonly SquareQueue _queue;
  32.  
  33. public SquareWorker(ILogger<SquareQueue> logger, SquareQueue queue)
  34. {
  35. _logger = logger;
  36. _queue = queue;
  37. }
  38.  
  39. protected override async Task ExecuteAsync(CancellationToken stoppingToken)
  40. {
  41. while (!stoppingToken.IsCancellationRequested)
  42. {
  43. var data = await _queue.GetData();
  44. _logger.LogInformation($"Square of {data.Item1} and {data.Item2} = {data.Item1 * data.Item2}");
  45. await Task.Delay(1000, stoppingToken);
  46. }
  47. }
  48. }
  49.  
  50. public class SquareQueue
  51. {
  52. ILogger<SquareQueue> _logger;
  53.  
  54. ConcurrentQueue<(double, double)> dataQueue;
  55. public SquareQueue(ILogger<SquareQueue> logger)
  56. {
  57. _logger = logger;
  58. dataQueue = new ConcurrentQueue<(double, double)>();
  59. }
  60.  
  61. public async Task<(double, double)> GetData()
  62. {
  63. await Task.Yield();
  64. if (dataQueue.TryDequeue(out var result))
  65. return result;
  66. return (0, 0);
  67. }
  68. public async void AddData(double a, double b)
  69. {
  70. await Task.Yield();
  71. dataQueue.Enqueue((a, b));
  72. }
  73. }
  74.  
  75. public class AddDataWorcker : BackgroundService
  76. {
  77. private readonly ILogger<SquareQueue> _logger;
  78. private readonly SquareQueue _queue;
  79. Random random = new Random();
  80.  
  81. public AddDataWorcker(ILogger<SquareQueue> logger, SquareQueue queue)
  82. {
  83. _logger = logger;
  84. _queue = queue;
  85. }
  86.  
  87. protected override async Task ExecuteAsync(CancellationToken stoppingToken)
  88. {
  89. while (!stoppingToken.IsCancellationRequested)
  90. {
  91. _queue.AddData(random.NextDouble() + random.Next(100), random.NextDouble() + random.Next(100));
  92. await Task.Delay(1000, stoppingToken);
  93. }
  94. }
  95. }
  96.  
  97. }
  98.  
Compilation error #stdin compilation error #stdout 0s 0KB
stdin
Standard input is empty
compilation info
prog.cs(7,21): error CS0234: The type or namespace name `Extensions' does not exist in the namespace `Microsoft'. Are you missing an assembly reference?
prog.cs(8,21): error CS0234: The type or namespace name `Extensions' does not exist in the namespace `Microsoft'. Are you missing an assembly reference?
prog.cs(9,21): error CS0234: The type or namespace name `Extensions' does not exist in the namespace `Microsoft'. Are you missing an assembly reference?
prog.cs(28,33): error CS0246: The type or namespace name `BackgroundService' could not be found. Are you missing an assembly reference?
prog.cs(75,35): error CS0246: The type or namespace name `BackgroundService' could not be found. Are you missing an assembly reference?
prog.cs(18,23): error CS0246: The type or namespace name `IHostBuilder' could not be found. Are you missing an assembly reference?
prog.cs(30,26): error CS0246: The type or namespace name `ILogger' could not be found. Are you missing an assembly reference?
prog.cs(33,29): error CS0246: The type or namespace name `ILogger' could not be found. Are you missing an assembly reference?
prog.cs(39,39): error CS0115: `SukaBlyad.SquareWorker.ExecuteAsync(System.Threading.CancellationToken)' is marked as an override but no suitable method found to override
prog.cs(52,9): error CS0246: The type or namespace name `ILogger' could not be found. Are you missing an assembly reference?
prog.cs(55,28): error CS0246: The type or namespace name `ILogger' could not be found. Are you missing an assembly reference?
prog.cs(77,26): error CS0246: The type or namespace name `ILogger' could not be found. Are you missing an assembly reference?
prog.cs(81,31): error CS0246: The type or namespace name `ILogger' could not be found. Are you missing an assembly reference?
prog.cs(87,39): error CS0115: `SukaBlyad.AddDataWorcker.ExecuteAsync(System.Threading.CancellationToken)' is marked as an override but no suitable method found to override
Compilation failed: 14 error(s), 0 warnings
stdout
Standard output is empty