Created
May 10, 2023 07:14
-
-
Save mcihad/50b683d2c01925024c7b2d3d9e23a250 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class NumberWorker: BackgroundService | |
{ | |
private readonly ILogger<TimeWorker> _logger; | |
private readonly ChannelReader<int> _channel; | |
public NumberWorker(ILogger<TimeWorker> logger, ChannelReader<int> channel) | |
{ | |
_logger = logger; | |
_channel = channel; | |
} | |
protected override async Task ExecuteAsync(CancellationToken stoppingToken) | |
{ | |
_logger.LogInformation("NumberWorker running at: {time}", DateTimeOffset.Now); | |
await foreach (var item in _channel.ReadAllAsync(stoppingToken)) | |
{ | |
try | |
{ | |
_logger.LogInformation("Number sended to channel: {Item}", item); | |
} catch (Exception ex) | |
{ | |
_logger.LogError(ex, "Error in NumberWorker"); | |
} | |
} | |
} | |
} | |
[ApiController] | |
[Route("[controller]")] | |
public class SendNumberController: ControllerBase | |
{ | |
private readonly ChannelWriter<int> _channel; | |
public SendNumberController(ChannelWriter<int> channel) | |
{ | |
_channel = channel; | |
} | |
[HttpGet("{number}")] | |
public async Task<IActionResult> SendNumber([FromRoute] int number=0) | |
{ | |
await _channel.WriteAsync(number); | |
return Ok(); | |
} | |
} | |
builder.Services.AddSingleton(Channel.CreateUnbounded<int>(new UnboundedChannelOptions() { SingleReader = true })); | |
builder.Services.AddSingleton(svc => svc.GetRequiredService<Channel<int>>().Reader); | |
builder.Services.AddSingleton(svc => svc.GetRequiredService<Channel<int>>().Writer); | |
builder.Services.AddHostedService<NumberWorker>(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment