Sobes.tech
Junior — Middle

Чӣ гуна механизми иҷро кардан мумкин аст, ки дар он хидмати пасзамана маълумотҳоро дар базаи додаҳо навсозӣ мекунад?

sobes.tech AI

Ҷавоб аз AI

Барои татбиқи хидмати пасзамина, ки маълумотҳоро дар асоси маълумотҳо дар C# ба таври давомдор навсозӣ мекунад, метавон чанд роҳро истифода бурд. Яке аз маъмултаринҳо истифодаи синфи System.Threading.Timer ё Task бо цикл ва таъхир мебошад.

Масалан бо истифодаи Timer:

using System;
using System.Threading;

class BackgroundUpdater
{
    private Timer _timer;

    public void Start()
    {
        // Ифтитоҳи таймер, ки ҳар 10 дақиқа функсияи UpdateData-ро даъват мекунад
        _timer = new Timer(UpdateData, null, TimeSpan.Zero, TimeSpan.FromMinutes(10));
    }

    private void UpdateData(object state)
    {
        // Логикаи навсозии маълумот дар база
        // Масалан, пайвастшавӣ ба база ва иҷрои суолҳо
        Console.WriteLine("Навсозии маълумот дар база: " + DateTime.Now);
    }

    public void Stop()
    {
        _timer?.Change(Timeout.Infinite, 0);
    }
}

Варианти дигар истифодаи методи асинхронӣ бо цикл ва таъхир:

using System;
using System.Threading.Tasks;

class BackgroundUpdater
{
    private bool _isRunning = false;

    public async Task StartAsync()
    {
        _isRunning = true;
        while (_isRunning)
        {
            UpdateData();
            await Task.Delay(TimeSpan.FromMinutes(10));
        }
    }

    private void UpdateData()
    {
        // Логикаи навсозии маълумот
        Console.WriteLine("Навсозии маълумот дар база: " + DateTime.Now);
    }

    public void Stop()
    {
        _isRunning = false;
    }
}

Барои сценарияҳои мураккабтар, метавон китобхонаҳо ва рамзҳои махсус, масалан Quartz.NET барои нақшаи корҳо ё имкониятҳои дарунсохти ASP.NET Core барои хидматҳои пасзамина (IHostedService) истифода бурд.