/
BackgroundQueueController.cs
41 lines (34 loc) · 1.26 KB
/
BackgroundQueueController.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
using System;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.DependencyInjection;
namespace DNTCommon.Web.Core.TestWebApp.Controllers;
public class BackgroundQueueController : Controller
{
private readonly IBackgroundQueueService _queue;
public BackgroundQueueController(IBackgroundQueueService queue)
{
_queue = queue;
}
public IActionResult Index()
{
// Synchronous version
_queue.QueueBackgroundWorkItem((cancellationToken, serviceProvider) =>
{
//NOTES:
// 1- There is no `HttpContext` available here.
// 2- Retrive your services from the `serviceProvider` using the `serviceProvider.GetRequiredService<T>()` method.
// Because other injected services will be disposed at the end of the request automatically.
Console.WriteLine("Running job 1");
var emailService = serviceProvider.GetRequiredService<IWebMailService>();
// ...
});
// Asynchronous version
_queue.QueueBackgroundWorkItem(async (cancellationToken, serviceProvider) =>
{
await Task.Delay(1000);
Console.WriteLine("Running job 2");
});
return View();
}
}