'How to run method in every 5 minute in .net core windows background service

I have created windows background service using .net core. So I need to run following Get method in every 5 minute using timer.

public async Task<ActionResult> Get()
    {
        var result = new List<string>();
        var client = new HttpClient();
        var payload = "{\r\n  \"api\": {\r\n \"NAME\":\"QUERY\"\r\n},\r\n\"header\" : {\r\n\"QUERY\":\"select UPLOAD_RECEIPT_HEADER.INTERFACE_RECORD_ID, UPLOAD_RECEIPT_HEADER.USER_DEF3 As SOURCE_TRANSACTION_ID,UPLOAD_RECEIPT_DETAIL.ERP_ORDER_LINE_NUM, UPLOAD_RECEIPT_DETAIL.ITEM, UPLOAD_RECEIPT_DETAIL.USER_DEF3 As FULLFILLMENT_LINE_ID from UPLOAD_RECEIPT_HEADER join UPLOAD_RECEIPT_DETAIL on UPLOAD_RECEIPT_DETAIL.INTERFACE_LINK_ID = UPLOAD_RECEIPT_HEADER.INTERFACE_RECORD_ID where UPLOAD_RECEIPT_HEADER.Close_date is not null and UPLOAD_RECEIPT_DETAIL.USER_DEF6 is null\"\r\n }\r\n}";
        var stringContent = new StringContent(payload, Encoding.UTF8, "application/json");
        var baseUrl = iniFile.GetValue("GLOBAL", "DB_DATA_SERVICE", null);
        var response = await client.PostAsync(baseUrl, stringContent);
        var json = await response.Content.ReadAsStringAsync();
        if (response.IsSuccessStatusCode)
        {
            var uploadOrder = JsonConvert.DeserializeObject<UploadOrder>(json);
            var details = uploadOrder.LineItems.GroupBy(x => x.INTERFACE_RECORD_ID);
            foreach (var obj in details)
            {
                if (obj.Any())
                {
                    var order = new Order();
                    order.SourceTransactionId = obj.FirstOrDefault().SOURCE_TRANSACTION_ID;
                    order.Lines = new List<Line>();
                    foreach (var line in obj)
                    {
                        var l = new Line();
                        l.FullfillmentLineId = line.FULLFILLMENT_LINE_ID;
                        l.LineNumber = line.ERP_ORDER_LINE_NUM;
                        l.ItemNumber = line.ITEM;
                        l.StatusCode = "SHIPPED";
                        l.Status = "Shipped";
                        order.Lines.Add(l);
                    }
                    var orders = new Orders();
                    orders.orders = new List<Order>();
                    orders.orders.Add(order);
                    var a = await OicCall(orders, obj.Key);
                    result.Add(a);
                }
            }
        }
        return Ok(String.Join(", ", result));
    }



 private void PublishEvent(object? state){
    // need to use Get method in here
 }


public void start() {
   // _timer = new Timer(PublishEvent, null, TimeSpan.Zero,TimeSpan.FromMinutes(this.TimePeriod));
   // Need to use PublishEvent in here
}


Solution 1:[1]

public class Processor : BackgroundService
{
    protected override async Task ExecuteAsync(CancellationToken token)
    {
        await Task.Yield();

        while (token.IsCancellationRequested == false)
        {
            await Task.Delay(300000, token);
            await ExecuteGetMethod();
        }
    }
}

// Startup.cs
services.AddHostedService<Processor>();

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Fabio