Skip to content

Instantly share code, notes, and snippets.

@mcihad
Created May 10, 2023 07:14
Show Gist options
  • Save mcihad/50b683d2c01925024c7b2d3d9e23a250 to your computer and use it in GitHub Desktop.
Save mcihad/50b683d2c01925024c7b2d3d9e23a250 to your computer and use it in GitHub Desktop.
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