'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 |
