Skip to content

Instantly share code, notes, and snippets.

@EngRajabi
Last active September 17, 2020 13:13
Show Gist options
  • Save EngRajabi/bac856fa341d035dabb212a3281ef2b1 to your computer and use it in GitHub Desktop.
Save EngRajabi/bac856fa341d035dabb212a3281ef2b1 to your computer and use it in GitHub Desktop.
Worker.cs
// add to di singleton
public class Worker
{
private readonly ILogger<Worker> _logger;
private readonly IServiceProvider _serviceProvider;
private readonly ActionBlock<SmsReq> _action;
public Worker(IServiceProvider serviceProvider, ILogger<Worker> logger)
{
_serviceProvider = serviceProvider;
_logger = logger;
var dataflowBlockOptions = new ExecutionDataflowBlockOptions
{
MaxDegreeOfParallelism = 10,
//MaxMessagesPerTask = 10
};
_action = new ActionBlock<SmsReq>(Send, dataflowBlockOptions);
}
public void Publish(SmsReq smsReq)
{
_action.Post(smsReq);
}
private async Task Send(SmsReq smsReq)
{
try
{
using var scope = _serviceProvider.CreateScope();
var service = scope.ServiceProvider.GetRequiredService<ISmsSender>();
await service.Send(smsReq);
}
catch (Exception e)
{
_logger.LogError(e, e.Message);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment