Sobes.tech
Junior — Middle

Kaip galima įgyvendinti mechanizmą, kai foninė paslauga atnaujina duomenis duomenų bazėje?

sobes.tech AI

Atsakymas iš AI

Norint įgyvendinti foninę paslaugą, kuri periodiškai atnaujina duomenis duomenų bazėje naudojant C#, galima naudoti kelis požiūrius. Vienas iš dažniausiai naudojamų — naudoti klasę System.Threading.Timer arba Task su ciklu ir užlaikymu.

Pavyzdys naudojant Timer:

using System;
using System.Threading;

class BackgroundUpdater
{
    private Timer _timer;

    public void Start()
    {
        // Pradedame laikmatį, kuris kas 10 minučių iškvies metodą UpdateData
        _timer = new Timer(UpdateData, null, TimeSpan.Zero, TimeSpan.FromMinutes(10));
    }

    private void UpdateData(object state)
    {
        // Duomenų atnaujinimo logika
        // Pavyzdžiui, jungimasis prie DB ir užklausų vykdymas
        Console.WriteLine("Duomenų atnaujinimas duomenų bazėje: " + DateTime.Now);
    }

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

Kitas variantas — naudoti asinchroninį metodą su ciklu ir užlaikymu:

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()
    {
        // Duomenų atnaujinimo logika
        Console.WriteLine("Duomenų atnaujinimas duomenų bazėje: " + DateTime.Now);
    }

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

Daugiau sudėtingų scenarijų galima naudoti specializuotas bibliotekas ir karkasus, pavyzdžiui, Quartz.NET užduočių planavimui arba įmontuotas ASP.NET Core galimybes foninėms paslaugoms (IHostedService).